メッセージ ストア プロバイダーの読み込み
適用対象: Outlook 2013 | Outlook 2016
クライアント アプリケーションがメッセージ ストアを開くと、MAPI はメッセージ ストア プロバイダーの DLL をメモリに読み込みます。 MAPI が DLL を読み込んだ後、メッセージ ストア プロバイダーと MAPI の間でメソッド呼び出しの非常に特定のシーケンスが発生します。 このメソッド呼び出しシーケンスを使用すると、MAPI で最上位の IMSProvider を取得できます。IUnknown、 IMSLogon : IUnknown、 IMsgStore : IMAPIProp インターフェイスを使用すると、メッセージ ストア プロバイダーは MAPI サポート オブジェクトを取得できます。 呼び出しシーケンスの後、メッセージ ストア プロバイダーはクライアントからのログオンを受け入れる準備ができている必要があります。
メッセージ プロバイダー DLL が読み込まれる場合の呼び出しシーケンスは次のとおりです。
クライアントは IMAPISession::OpenMsgStore を呼び出します。
メッセージ ストアがまだ開いていない場合、MAPI はストア プロバイダーの DLL を読み込み、DLL の MSProviderInit エントリ ポイントを呼び出します。 メッセージ ストアが既に開いている場合、MAPI は手順 2 と 3 をスキップし、既存の IMSProvider : IUnknown インターフェイスを使用して手順 4 を完了します。
MSProviderInit は、IMSProvider オブジェクトを作成して返します。
MAPI は IMSProvider::Logon を呼び出し、クライアント アプリケーションのメッセージ ストア エントリ識別子を渡します。
IMSProvider::Logon は、IMSLogon : IUnknown インターフェイスと IMsgStore : IMAPIProp インターフェイスを作成して返し、その IMAPISupport : IUnknown インターフェイスで IUnknown::AddRef メソッドを呼び出します。 クライアントのメッセージ ストアエントリ識別子が既に開いているメッセージ ストアを参照している場合、メッセージ ストア プロバイダーは既存の IMSLogon インターフェイスと IMsgStore インターフェイスを返すことができるので、サポート オブジェクトで AddRef を呼び出す必要はありません。
クライアントがログオンしたときにMAPI_NO_MAIL フラグを設定せず、手順 1 でMDB_NO_MAILを設定しなかった場合、MAPI はメッセージ ストアのエントリ識別子を MAPI スプーラーに渡して、MAPI スプーラーがメッセージ ストアにログオンできるようにします。
MAPI は IMsgStore インターフェイスをクライアントに返します。
MAPI スプーラーは IMSProvider::SpoolerLogon を呼び出します。
IMSProvider::SpoolerLogon は 、手順 5. から同じ IMSLogon インターフェイスと IMsgStore インターフェイスを 返します。
注:
正しくないパスワードが指定されたためにメッセージ ストア プロバイダーへのログオン呼び出しが失敗し、メッセージ ストア プロバイダーが正しいパスワードを要求するインターフェイスを表示できない場合は、 IMSProvider::Logon メソッドからMAPI_E_FAILONEPROVIDERを返す必要があります。 これにより、クライアントは、MAPI がセッション全体のプロバイダーを失敗させる代わりに、メッセージ ストア プロバイダーに再度ログオンしようとするパスワードをユーザーに求められます。