Как узнать различимое имя хранилища информации для отправки в IExchangeManageStore::GetMailboxTable?
-
09-06-2019 - |
Вопрос
Существует Статья из базы знаний Microsoft с примером кода для открытия всех почтовых ящиков в данном информационном хранилище.Это работает до сих пор (требуется немного копирование и вставка на компиляторах новее, чем VC ++ 6.0).
В какой-то момент он вызывает IExchangeManageStore::GetMailboxTable с отличительным именем хранилища информации.Для пробного образа виртуального сервера Exchange 2007 он должен выглядеть следующим образом:
"/o=Litware Inc/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=servers/cn=DC1".
Используя Дальновидный шпион и нажатие на 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, он извлекает DN сервера из данных данного сеанса PR_EMS_AB_HOME_MTA.Я попробую это сделать, если другой способ окажется ненадежным.
Другие советы
Это будет в Active Directory, поэтому вы должны использовать ADSI / LDAP для просмотра CN = Microsoft Exchange,CN = Services, CN = Configuration, DC =пример,Постоянныйток=ком.Используйте ADExplorer от Sysinternals, чтобы покопаться там и найти значение, которое вы ищете.
Я бы скачал исходный код для MFCMapi и посмотрел, как они это делают.