Como descobrir o nome distinto da caixa de armazenamento de informações para alimentar IExchangeManageStore::GetMailboxTable?
-
09-06-2019 - |
Pergunta
Há um Artigo da base de dados de conhecimento da Microsoft com o código de exemplo para abrir todas as caixas de correio em um dado arquivo de informações.Ele funciona tão longe (requer um pouco de copiar & colar em compiladores mais novos do que o VC++ 6.0).
Em um ponto ele chama IExchangeManageStore::GetMailboxTable com o nome distinto da caixa de armazenamento de informações.Para o Exchange 2007 de Avaliação de imagem de Servidor Virtual tem este aspecto:
"/o=Litware Inc/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=servers/cn=DC1".
Usando OutlookSpy e clicando no IMsgStore e IExchangeManageStore revela a seqüência desejada ao lado de "Servidor DN:".
Eu quero evitar forçar o usuário a colocar isto em um arquivo de configuração.Então, se OutlookSpy pode fazê-lo, como meu aplicativo pode descobrir o nome distinto da caixa de armazenamento de informações, onde actualmente abrir a caixa de correio é?
Solução
O pensamento tem de ser um puro MAPI solução, eu acredito que eu descobri como OutlookSpy faz.
O trecho de código a seguir, inserido após
printf("Created MAPI session\n");
no exemplo de KB194627, vai mostrar a DN do servidor.
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();
}
Atualização:
Existe a função HrGetServerDN no 5.5 EDK código-fonte, ele extrai o DN do servidor a partir de uma dada sessão PR_EMS_AB_HOME_MTA.Eu vou tentar, se a outra forma acaba por ser não-confiáveis.
Outras dicas
Vai ser no Active Directory, assim que você usar o ADSI/LDAP para olhar em CN=Microsoft Exchange,CN=Serviços,CN=Configuração,DC=exemplo,DC=com.Usar o Sysinternals' ADExplorer ter uma cavar em volta lá para encontrar o valor que você está procurando.
Eu gostaria de baixar a fonte para o MFCMapi e ver como eles fazem isso.