Iniciar sesión en un proveedor de almacén de archivos PST ajustado
Hace referencia a: Outlook 2013 | Outlook 2016
Para poder iniciar sesión en MAPI en un proveedor de almacén PST ajustado, debe inicializar y configurar el proveedor de almacén de archivos de carpetas personales encapsulados (PST). Para obtener más información, vea Inicializar un proveedor de almacenamiento PST ajustado.
Después de inicializar y configurar un proveedor de almacenamiento PST ajustado, debe implementar dos rutinas de inicio de sesión. La función IMSProvider::Logon inicia sesión en MAPI en el proveedor de almacén PST encapsulado. La función IMSProvider::SpoolerLogon registra en la cola MAPI al proveedor de almacén PST encapsulado.
En este tema, la función IMSProvider::Logon y la función IMSProvider::SpoolerLogon se muestran mediante ejemplos de código del proveedor de almacén PST encapsulado de ejemplo. El ejemplo implementa un proveedor de PST encapsulado que está pensado para usarse junto con la API de replicación. Para obtener más información sobre cómo descargar e instalar el proveedor de almacén DE PST encapsulado de ejemplo, vea Instalar el proveedor de almacén PST encapsulado de ejemplo. Para obtener más información sobre la API de replicación, consulte Acerca de la API de replicación.
Una vez que MAPI y la cola MAPI han iniciado sesión en el proveedor de almacén PST encapsulado, está listo para usarse. Para obtener más información, vea Using a Wrapped PST Store Provider.
Rutina de inicio de sesión MAPI
Una vez inicializado el proveedor de almacenamiento PST ajustado, debe implementar la función IMSProvider::Logon para iniciar sesión en MAPI en el almacén PST ajustado. Esta función valida las credenciales de usuario y obtiene las propiedades de configuración del proveedor. También debe implementar la SetOLFIInOST
función para establecer la información de archivo sin conexión (OLFI ).
OLFI es una cola de estructuras de identificadores a largo plazo que usa el proveedor de almacén PST encapsulado para asignar un identificador de entrada para un nuevo mensaje o carpeta en modo sin conexión. Por último, la función IMSProvider::Logon devuelve un objeto de almacén de mensajes en el que las aplicaciones cliente y de cola MAPI pueden iniciar sesión en el ppMDB
parámetro .
Ejemplo de 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;
}
Rutina de inicio de sesión de cola MAPI
De forma similar a IMSProvider::Logon, debe implementar la función IMSProvider::SpoolerLogon para registrar la cola MAPI en el almacén PST encapsulado. En el ppMDB
parámetro se devuelve un objeto de almacén de mensajes en el que la cola MAPI y las aplicaciones cliente pueden iniciar sesión.
Ejemplo de 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;
}