Share via


ラップされた 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; 
}

関連項目