Как узнать различающееся имя хранилища информации для передачи в IExchangeManageStore::GetMailboxTable?

Существует статья базы знаний Microsoft с примером кода для открытия всех почтовых ящиков в заданном хранилище информации. . Пока это работает (требуется немного копировать и вставлять на компиляторах новее, чем VC++ 6.0).

В какой-то момент он вызывает IExchangeManageStore::GetMailboxTable с различающимся именем хранилища данных. Образ пробного виртуального сервера Exchange 2007 должен выглядеть следующим образом:

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

Использование OutlookSpy и нажатие на IMsgStore и IExchangeManageStore показывает нужную строку рядом с "Server DN:".

Я хочу не заставлять пользователя помещать это в файл конфигурации. Итак, если OutlookSpy может это сделать, как мое приложение может узнать различающееся имя хранилища информации, в котором находится открытый в данный момент почтовый ящик?


person Sebastian Kirsche    schedule 17.09.2008    source источник


Ответы (3)


Думая, что должно быть чистое решение 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. .aspx?FamilyID=36a309c3-8c55-4476-8785-cafc59a2d075&DisplayLang=en" rel="nofollow noreferrer">исходный код EDK 5.5 извлекает DN сервера из данного сеанса < em>PR_EMS_AB_HOME_MTA. Попробую, если другой способ окажется ненадежным.

person Sebastian Kirsche    schedule 18.09.2008

Он будет в Active Directory, поэтому вы должны использовать ADSI/LDAP для просмотра CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=example,DC=com< /эм>. Используйте ADExplorer от Sysinternals, чтобы покопаться там и найти то значение, которое вы ищете.

person Duncan Smart    schedule 17.09.2008

Я бы скачал исходники MFCMapi и посмотрел, как они это делают.

person Cain T. S. Random    schedule 30.12.2008