Поделиться через


Загрузка поставщиков хранилища сообщений

Область применения: Outlook 2013 | Outlook 2016

Когда клиентское приложение открывает хранилище сообщений, MAPI загружает библиотеку DLL поставщика хранилища сообщений в память. После загрузки БИБЛИОТЕКи DLL MAPI между поставщиком хранилища сообщений и MAPI происходит определенная последовательность вызовов методов. Эта последовательность вызовов метода позволяет MAPI получить интерфейсы IMSProvider верхнего уровня : IUnknown, IMSLogon : IUnknown и IMsgStore : IMAPIProp и позволяет поставщику хранилища сообщений получить объект поддержки MAPI. После последовательности вызовов поставщик хранилища сообщений должен быть готов к приему входов от клиентов.

Последовательность вызовов при загрузке библиотеки DLL поставщика сообщений выглядит следующим образом:

  1. Клиент вызывает IMAPISession::OpenMsgStore.

  2. Если хранилище сообщений еще не открыто, MAPI загружает библиотеку DLL поставщика хранилища и вызывает точку входа MSProviderInit библиотеки DLL. Если хранилище сообщений уже открыто, MAPI пропускает шаги 2 и 3, а затем использует существующий интерфейс IMSProvider : IUnknown для выполнения шага 4.

  3. MSProviderInit создает и возвращает объект IMSProvider .

  4. MAPI вызывает IMSProvider::Logon, передавая идентификатор входа в хранилище сообщений клиентского приложения.

  5. IMSProvider::Logon создает и возвращает интерфейс IMSLogon : IUnknown и интерфейс IMsgStore : IMAPIProp , а затем вызывает метод IUnknown::AddRef в интерфейсе IMAPISupport : IUnknown . Если идентификатор входа хранилища сообщений клиента ссылается на уже открытое хранилище сообщений, поставщик хранилища сообщений может возвращать существующие интерфейсы IMSLogon и IMsgStore и не требует вызова AddRef для своего объекта поддержки.

  6. Если клиент не задал флаг MAPI_NO_MAIL при входе в систему и он не задал MDB_NO_MAIL на шаге 1, MAPI передает идентификатор входа хранилища сообщений в средство spooler MAPI, чтобы диспетчер очереди MAPI смог войти в хранилище сообщений.

  7. MAPI возвращает интерфейс IMsgStore клиенту.

  8. Диспетчер очереди MAPI вызывает IMSProvider::SpoolerLogon.

  9. IMSProvider::SpoolerLogon возвращает те же интерфейсы IMSLogon и IMsgStore из шага 5.

Примечание.

Если вызов для входа в систему поставщика хранилища сообщений завершается ошибкой из-за неправильного пароля и поставщик хранилища сообщений не может отобразить интерфейс, чтобы запросить правильный пароль, он должен вернуть MAPI_E_FAILONEPROVIDER из метода IMSProvider::Logon . Это позволит клиентам запрашивать у пользователя пароль для повторного входа в поставщик хранилища сообщений, а не привести к сбою поставщика MAPI в течение всего сеанса.

См. также

Разработка поставщика хранилища сообщений MAPI