如何找出供应给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();
}
更新:
有功能HrGetServerDN在EDK 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的源代码,看看他们是如何做到这一点的。