Compartilhar via


Fazer logon em um provedor do repositório PST encapsulado

Aplica-se a: Outlook 2013 | Outlook 2016

Antes de fazer logon no MAPI em um provedor de loja PST encapsulado, você deve inicializar e configurar o provedor de armazenamento PST (arquivo de pastas pessoais) encapsulado. Para obter mais informações, consulte Inicializando um provedor de repositório PST encapsulado.

Depois de inicializar e configurar um provedor de loja PST encapsulado, você deve implementar duas rotinas de logon. A função IMSProvider::Logon faz logon no MAPI para o provedor de repositório PST embrulhado. A função IMSProvider::SpoolerLogon faz logs no spooler MAPI para o provedor de loja PST encapsulado.

Neste tópico, a função IMSProvider::Logon e a função IMSProvider::SpoolerLogon são demonstradas usando exemplos de código do Provedor de Repositório PST encapsulado de exemplo. O exemplo implementa um provedor PST encapsulado que se destina a ser usado em conjunto com a API de Replicação. Para obter mais informações sobre como baixar e instalar o Provedor de Repositório PST Encapsulado de Exemplo, consulte Instalando o Provedor de Repositório PST Encapsulado de Exemplo. Para obter mais informações sobre a API de Replicação, consulte Sobre a API de Replicação.

Depois que MAPI e o spooler MAPI forem conectados ao provedor de armazenamento PST embrulhado, ele estará pronto para ser usado. Para obter mais informações, consulte Usando um provedor de loja PST encapsulado.

Rotina de logon MAPI

Depois que o provedor de loja PST encapsulado for inicializado, você deve implementar a função IMSProvider::Logon para fazer logon no MAPI no repositório PST encapsulado. Essa função valida as credenciais do usuário e obtém as propriedades de configuração do provedor. Você também deve implementar a SetOLFIInOST função para definir as Informações de Arquivo Offline (OLFI ). OLFI é uma fila de estruturas de ID de longo prazo que é usada pelo provedor de armazenamento PST encapsulado para atribuir uma ID de Entrada para uma nova mensagem ou pasta no modo offline. Por fim, a função IMSProvider::Logon retorna um objeto de repositório de mensagens ao qual o spooler MAPI e os aplicativos cliente podem fazer logon no ppMDB parâmetro.

Exemplo 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; 
}

Rotina do Logon do Spooler MAPI

Semelhante ao IMSProvider::Logon, você deve implementar a função IMSProvider::SpoolerLogon para registrar o spooler MAPI no repositório PST encapsulado. Um objeto de armazenamento de mensagens ao qual o spooler MAPI e os aplicativos cliente podem fazer logon é retornado no ppMDB parâmetro.

Exemplo 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; 
}

Confira também