ラップされた PST ストア プロバイダーへのログオン
適用対象: Outlook 2013 | Outlook 2016
ラップされた PST ストア プロバイダーに MAPI をログオンする前に、ラップされた個人用フォルダー ファイル (PST) ストア プロバイダーを初期化して構成する必要があります。 詳細については、「 ラップされた PST ストア プロバイダーの初期化」を参照してください。
ラップされた PST ストア プロバイダーを初期化して構成したら、2 つのログオン ルーチンを実装する必要があります。 IMSProvider::Logon 関数は、ラップされた PST ストア プロバイダーに MAPI でログを記録します。 IMSProvider::SpoolerLogon 関数は、ラップされた PST ストア プロバイダーに MAPI スプーラーでログを記録します。
このトピックでは、サンプルラップ PST ストア プロバイダーのコード例を使用して、 IMSProvider ::Logon 関数と IMSProvider::SpoolerLogon 関数を示します。 このサンプルでは、レプリケーション API と組み合わせて使用することを目的としたラップされた PST プロバイダーを実装しています。 サンプルラップ PST ストア プロバイダーのダウンロードとインストールの詳細については、「サンプルラップ PST ストア プロバイダーのインストール」を参照してください。 レプリケーション API の詳細については、「 レプリケーション API について」を参照してください。
MAPI と MAPI スプーラーがラップされた PST ストア プロバイダーにログオンした後、使用する準備が整います。 詳細については、「 ラップされた PST ストア プロバイダーの使用」を参照してください。
MAPI ログオン ルーチン
ラップされた PST ストア プロバイダーを初期化した後、ラップされた PST ストアに MAPI をログオンするには 、IMSProvider::Logon 関数を実装する必要があります。 この関数は、ユーザー資格情報を検証し、プロバイダーの構成プロパティを取得します。 オフライン ファイル情報 (OLFI) を設定する関数も実装SetOLFIInOST
する必要があります。
OLFI は、ラップされた PST ストア プロバイダーがオフライン モードで新しいメッセージまたはフォルダーのエントリ ID を割り当てるために使用される長期 ID 構造体のキューです。 最後に、 IMSProvider::Logon 関数は、MAPI スプーラーとクライアント アプリケーションがパラメーターでログオンできるメッセージ ストア オブジェクトを ppMDB
返します。
CMSProvider::Logon() の例
STDMETHODIMP CMSProvider::Logon(
LPMAPISUP pSupObj,
ULONG ulUIParam,
LPTSTR pszProfileName,
ULONG cbEntryID,
LPENTRYID pEntryID,
ULONG ulFlags,
LPCIID pInterface,
ULONG * pcbSpoolSecurity,
LPBYTE * ppbSpoolSecurity,
LPMAPIERROR * ppMAPIError,
LPMSLOGON * ppMSLogon,
LPMDB * ppMDB)
{
HRESULT hRes = S_OK;
LPMDB lpPSTMDB = NULL;
CMsgStore* pWrappedMDB = NULL;
Log(true,"CMSProvider::Logon Pst logon Called\n");
LPPROFSECT lpProfSect = NULL;
CSupport * pMySup = NULL;
hRes = GetGlobalProfileObject(pSupObj,&lpProfSect);
pMySup = new CSupport(pSupObj, lpProfSect);
if (!pMySup)
{
Log(true,"CMSProvider::Logon: Failed to allocate new CSupport object\n");
hRes = E_OUTOFMEMORY;
}
if (SUCCEEDED(hRes))
{
ulFlags = (ulFlags & ~MDB_OST_LOGON_ANSI) | MDB_OST_LOGON_UNICODE;
hRes = m_pPSTMS->Logon(
pMySup,
ulUIParam,
pszProfileName,
cbEntryID,
pEntryID,
ulFlags,
pInterface,
pcbSpoolSecurity,
ppbSpoolSecurity,
ppMAPIError,
ppMSLogon,
&lpPSTMDB);
}
Log(true,"CMSProvider::Logon returned 0x%08X\n", hRes);
// Set up the MDB to allow synchronization
if (SUCCEEDED(hRes))
{
hRes = SetOLFIInOST(lpPSTMDB);
Log(true,"SetOLFIInOST returned 0x%08X\n", hRes);
}
// Wrap the outgoing MDB
pWrappedMDB = new CMsgStore (lpPSTMDB);
if (NULL == pWrappedMDB)
{
Log(true,"CMSProvider::Logon: Failed to allocate new CMsgStore object\n");
hRes = E_OUTOFMEMORY;
}
// Copy pointer to the allocated object back into the return LPMDB object pointer
*ppMDB = pWrappedMDB;
if (lpProfSect) lpProfSect->Release();
return hRes;
}
MAPI スプーラー ログオン ルーチン
IMSProvider::Logon と同様に、ラップされた PST ストアに MAPI スプーラーをログに記録するには、IMSProvider::SpoolerLogon 関数を実装する必要があります。 MAPI スプーラーとクライアント アプリケーションがログオンできるメッセージ ストア オブジェクトがパラメーターで ppMDB
返されます。
CMSProvider::SpoolerLogon() の例
STDMETHODIMP CMSProvider::SpoolerLogon (
LPMAPISUP pSupObj,
ULONG ulUIParam,
LPTSTR pszProfileName,
ULONG cbEntryID,
LPENTRYID pEntryID,
ULONG ulFlags,
LPCIID pInterface,
ULONG cbSpoolSecurity,
LPBYTE pbSpoolSecurity,
LPMAPIERROR * ppMAPIError,
LPMSLOGON * ppMSLogon,
LPMDB * ppMDB)
{
HRESULT hRes = S_OK;
Log(true,"CMSProvider::SpoolerLogon\n");
LPPROFSECT lpProfSect = NULL;
CSupport * pMySup = NULL;
hRes = GetGlobalProfileObject(pSupObj,&lpProfSect);
pMySup = new CSupport(pSupObj, lpProfSect);
if (!pMySup)
{
Log(true,"CMSProvider::SpoolerLogon: " +
"Failed to allocate new CSupport object\n");
hRes = E_OUTOFMEMORY;
}
if (SUCCEEDED(hRes))
{
hRes = m_pPSTMS->SpoolerLogon(
pMySup,//pSupObj,
ulUIParam,
pszProfileName,
cbEntryID,
pEntryID,
ulFlags,
pInterface,
cbSpoolSecurity,
pbSpoolSecurity,
ppMAPIError,
ppMSLogon,
ppMDB);
}
Log(true,"CMSProvider::SpoolerLogon returned 0x%08X\n", hRes);
return hRes;
}