Compartilhar via


Carregando provedores de repositório de mensagens

Aplica-se a: Outlook 2013 | Outlook 2016

Quando um aplicativo cliente abre um repositório de mensagens, o MAPI carrega a DLL do provedor de armazenamento de mensagens na memória. Depois que o MAPI carrega a DLL, ocorre uma sequência muito específica de chamadas de método entre o provedor do repositório de mensagens e o MAPI. Essa sequência de chamadas de método permite que a MAPI obtenha interfaces IMSProvider de nível superior: IUnknown, IMSLogon : IUnknown e IMsgStore : IMAPIProp e permite que o provedor do repositório de mensagens obtenha um objeto de suporte MAPI. Após a sequência de chamadas, o provedor do repositório de mensagens deve estar pronto para aceitar logons de clientes.

A sequência de chamadas quando uma DLL do provedor de mensagens é carregada é a seguinte:

  1. O cliente chama IMAPISession::OpenMsgStore.

  2. Se o repositório de mensagens ainda não estiver aberto, o MAPI carregará a DLL do provedor de loja e chamará o ponto de entrada MSProviderInit da DLL. Se o repositório de mensagens já estiver aberto, o MAPI ignorará as etapas 2 e 3 e, em seguida, usará a interface IMSProvider : IUnknown existente para concluir a etapa 4.

  3. MSProviderInit cria e retorna um objeto IMSProvider .

  4. MAPI chama IMSProvider::Logon, passando o identificador de entrada do repositório de mensagens do aplicativo cliente.

  5. IMSProvider::Logon cria e retorna uma interface IMSLogon : IUnknown e uma interface IMsgStore : IMAPIProp e, em seguida, chama o método IUnknown::AddRef em sua interface IMAPISupport : IUnknown . Se o identificador de entrada do repositório de mensagens do cliente se referir a um repositório de mensagens que já está aberto, o provedor do repositório de mensagens poderá retornar interfaces IMSLogon e IMsgStore existentes e não precisar chamar AddRef em seu objeto de suporte.

  6. Se o cliente não definiu o sinalizador de MAPI_NO_MAIL quando ele se conectou e não definiu o MDB_NO_MAIL na etapa 1, a MAPI fornecerá o identificador de entrada do repositório de mensagens ao spooler MAPI para que o spooler MAPI possa fazer logon no repositório de mensagens.

  7. MAPI retorna a interface IMsgStore para o cliente.

  8. O spooler MAPI chama IMSProvider::SpoolerLogon.

  9. IMSProvider::SpoolerLogon retorna as mesmas interfaces IMSLogon e IMsgStore da etapa 5.

Observação

Se a chamada de logon para o provedor do repositório de mensagens falhar porque uma senha incorreta foi fornecida e o provedor do repositório de mensagens não puder exibir uma interface para pedir a senha correta, ela deverá retornar MAPI_E_FAILONEPROVIDER do método IMSProvider::Logon . Isso permitirá que os clientes solicitem ao usuário uma senha para tentar fazer logon no provedor do repositório de mensagens novamente em vez de fazer com que o MAPI falhe no provedor durante toda a sessão.

Confira também

Desenvolver um provedor de repositórios de mensagens MAPI