Partager via


Connexion à un fournisseur d’archive PST encapsulée

S’applique à : Outlook 2013 | Outlook 2016

Avant de pouvoir vous connecter à MAPI à un fournisseur de magasin PST encapsulé, vous devez initialiser et configurer le fournisseur de magasin de fichiers de dossiers personnels (PST) encapsulé. Pour plus d’informations, consultez Initialisation d’un fournisseur de magasin PST encapsulé.

Une fois que vous avez initialisé et configuré un fournisseur de magasin PST encapsulé, vous devez implémenter deux routines d’ouverture de session. La fonction IMSProvider ::Logon se connecte sur MAPI au fournisseur de magasin PST encapsulé. La fonction IMSProvider ::SpoolerLogon journalise le spouleur MAPI au fournisseur de magasin PST encapsulé.

Dans cette rubrique, la fonction IMSProvider ::Logon et la fonction IMSProvider ::SpoolerLogon sont illustrées à l’aide d’exemples de code provenant de l’exemple de fournisseur de magasin PST encapsulé. L’exemple implémente un fournisseur PST encapsulé destiné à être utilisé conjointement avec l’API de réplication. Pour plus d’informations sur le téléchargement et l’installation de l’exemple de fournisseur de magasin PST encapsulé, consultez Installation de l’exemple de fournisseur de magasin PST encapsulé. Pour plus d’informations sur l’API de réplication, consultez À propos de l’API de réplication.

Une fois que MAPI et le spouleur MAPI sont connectés au fournisseur de magasin PST encapsulé, il est prêt à être utilisé. Pour plus d’informations, consultez Utilisation d’un fournisseur de magasin PST encapsulé.

Routine d’ouverture de session MAPI

Une fois le fournisseur de magasin PST encapsulé initialisé, vous devez implémenter la fonction IMSProvider ::Logon pour vous connecter à MAPI au magasin PST encapsulé. Cette fonction valide les informations d’identification de l’utilisateur et obtient les propriétés de configuration du fournisseur. Vous devez également implémenter la SetOLFIInOST fonction pour définir les informations de fichier hors connexion (OLFI ). OLFI est une file d’attente de structures d’ID à long terme qui est utilisée par le fournisseur de magasin PST encapsulé pour attribuer un ID d’entrée à un nouveau message ou dossier en mode hors connexion. Enfin, la fonction IMSProvider ::Logon retourne un objet de magasin de messages auquel le spouleur MAPI et les applications clientes peuvent se connecter dans le ppMDB paramètre .

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

Routine d’ouverture de session du spouleur MAPI

Comme pour IMSProvider ::Logon, vous devez implémenter la fonction IMSProvider ::SpoolerLogon pour journaliser le spouleur MAPI dans le magasin PST encapsulé. Un objet de magasin de messages auquel le spouleur MAPI et les applications clientes peuvent se connecter est retourné dans le ppMDB paramètre .

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

Voir aussi