How to find out the distinguished name of the information store to feed to IExchangeManageStore::GetMailboxTable?

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

Question

There is a Microsoft knowledge base article with sample code to open all mailboxes in a given information store. It works so far (requires a bit of copy & pasting on compilers newer than VC++ 6.0).

At one point it calls IExchangeManageStore::GetMailboxTable with the distinguished name of the information store. For the Exchange 2007 Trial Virtual Server image it has to look like this:

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

Using OutlookSpy and clicking on IMsgStore and IExchangeManageStore reveals the desired string next to "Server DN:".

I want to avoid forcing the user to put this into a config file. So if OutlookSpy can do it, how can my application find out the distinguished name of the information store where the currently open mailbox is on?

Was it helpful?

Solution

Thinking there must be a pure MAPI solution, I believe I've figured out how OutlookSpy does it.


The following code snippet, inserted after

printf("Created MAPI session\n");

in the example from KB194627, will show the Server DN.

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();
}



Update:
There is the function HrGetServerDN in the EDK 5.5 source code, it extracts the Server DN from a given session's PR_EMS_AB_HOME_MTA. I'll try it if the other way turns out to be unreliable.

OTHER TIPS

It'll be in Active Directory, so you'd use ADSI/LDAP to look at CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=example,DC=com. Use Sysinternals' ADExplorer to have a dig around in there to find the value you're looking for.

I'd download the source for MFCMapi and see how they do this.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top