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를 클릭하면 "Server 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=를 확인합니다.예,DC=com.Sysinternals의 ADExplorer를 사용하여 원하는 값을 찾아보세요.
MFCMapi의 소스를 다운로드하고 이것이 어떻게 수행되는지 살펴보겠습니다.