Como descobrir o nome distinto da caixa de armazenamento de informações para alimentar IExchangeManageStore::GetMailboxTable?

StackOverflow https://stackoverflow.com/questions/80831

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 é?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top