Come trovare il nome distinto dell'archivio informazioni da alimentare a IExchangeManageStore::GetMailboxTable?

StackOverflow https://stackoverflow.com/questions/80831

Domanda

C'è un Articolo della Knowledge Base di Microsoft con codice di esempio per aprire tutte le cassette postali in un determinato archivio informazioni.Funziona finora (richiede un po' di copia e incolla su compilatori più recenti di VC++ 6.0).

Ad un certo punto chiama IExchangeManageStore::GetMailboxTable con il nome distinto dell'archivio informazioni.L'immagine del server virtuale di prova di Exchange 2007 deve assomigliare a questa:

"/o=Litware Inc/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=servers/cn=DC1".

Utilizzando OutlookSpia e facendo clic su IMsgStore e IExchangeManageStore viene visualizzata la stringa desiderata accanto a "Server DN:".

Voglio evitare di forzare l'utente a inserirlo in un file di configurazione.Quindi, se OutlookSpy può farlo, come può la mia applicazione scoprire il nome distinto dell'archivio informazioni in cui si trova la casella di posta attualmente aperta?

È stato utile?

Soluzione

Pensando che debba esserci una soluzione MAPI pura, credo di aver capito come lo fa OutlookSpy.


Il seguente frammento di codice, inserito dopo

printf("Created MAPI session\n");

nell'esempio da KB194627, mostrerà il DN del server.

LPPROFSECT lpProfSect;
hr = lpSess->OpenProfileSection((LPMAPIUID)pbGlobalProfileSectionGuid, NULL, 0, &lpProfSect);
if(SUCCEEDED(hr))
{
    LPSPropValue lpPropValue;
    hr = HrGetOneProp(lpProfSect, PR_PROFILE_HOME_SERVER_DN, &lpPropValue);
    if(SUCCEEDED(hr))
    {
        printf("Server DN: %s\n", lpPropValue->Value.lpszA);
        MAPIFreeBuffer(lpPropValue);
    }
    lpProfSect->Release();
}



Aggiornamento:
C'è la funzione HrGetServerDN nel Codice sorgente EDK 5.5, estrae il DN del server da una determinata sessione PR_EMS_AB_HOME_MTA.Lo proverò se il contrario si rivela inaffidabile.

Altri suggerimenti

Sarà in Active Directory, quindi utilizzerai ADSI/LDAP per esaminare CN=Microsoft Exchange,CN=Servizi,CN=Configurazione,DC=esempio,DC=com.Utilizza ADExplorer di Sysinternals per scavare lì dentro e trovare il valore che stai cercando.

Scaricherei il sorgente per MFCMapi e vedrei come lo fanno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top