如何找出供应给IExchangeManageStore :: GetMailboxTable的信息存储的可分辨名称?

问题描述:

有一个Microsoft knowledge base article带有示例代码以打开给定信息存储中的所有邮箱。它到目前为止工作(编译器需要比VC++ 6.0更新的copy & pasting)。如何找出供应给IExchangeManageStore :: GetMailboxTable的信息存储的可分辨名称?

有一次它调用IExchangeManageStore :: GetMailboxTable与信息存储的可分辨名称。对于Exchange 2007试用虚拟服务器映像它看起来像这样:

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

使用OutlookSpy,点击IMsgStore和IExchangeManageStore显示所需字符串旁边的“服务器DN:”。

我想避免强制用户把它放到配置文件中。因此,如果OutlookSpy可以做到这一点,我的应用程序如何找出当前打开的邮箱所在信息存储的可分辨名称?

思考必须有一个纯粹的MAPI解决方案,我相信我已经弄清楚OutlookSpy是如何做到这一点的。


下面的代码段,后

printf("Created MAPI session\n"); 
在示例

KB194627插入时,将显示服务器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(); 
} 



更新:
有功能HrGetServerDNEDK 5.5 source code,它从一个给定的会话的PR_EMS_AB_HOME_MTA提取服务器DN。如果其他方式变得不可靠,我会尝试。

这将是在Active Directory中,所以你会使用ADSI/LDAP看看CN =的Microsoft Exchange,CN =服务,CN =配置,DC = 例如,DC = COM。使用Sysinternals的ADExplorer可以在那里找到你正在寻找的值。

我会下载MFCMapi的源代码,看看他们是如何做到这一点的。