Como obter as ACL para pastas que não própria

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 197743
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sumário
Este artigo demonstra como aceder a lista de controlo de acesso (ACL) de uma pasta pública que não seja propriedade do utilizador com sessão iniciada actualmente. Enquanto o código de exemplo é específico para este fim, o mesmo código pode ser facilmente modificado para aceder ou modificar as ACLs de qualquer pasta em qualquer arquivo de informações.
Mais Informação
A lista de controlo de acesso da qualquer pasta do Exchange Microsoft determinado está contida nas propriedades do PR_ACL_DATA ou PR_ACL_TABLE dessa pasta.

As seguintes funções são utilizadas para aceder as ACL numa pasta pública num arquivo de informações do Exchange. Para rever os dados na propriedade PR_ACL_DATA, terá de obter os dados para uma estrutura SRowSet. Obter estas informações numa estrutura SRowSet é o principal objectivo do código abaixo.

As seguintes bibliotecas têm de ser estaticamente associadas com o projecto:
  • Kernel32.lib
  • User32.lib
  • Version.lib
  • Advapi32.lib
  • Msvcrt.lib
  • Mapi32.lib
  • Edkguid.lib
  • Edkutils.lib
  • Edkmapi.lib
  • Addrlkup.lib
  • Edkdebug.lib
  • Mblogon.lib

Exemplo de código

    // TODO: Change these constants to reflect the folder and server of    // interest.    #define STR_FOLDER_NAME "\\IPM_SUBTREE\\AFolder"    #define STR_DN_SERVERNAME "/O=Org/OU=AServer"\          "/CN=Configuration/CN=Servers"\          "/CN=AServer/CN=Org Private MDB"    #include <windows.h>    #include <edk.h>    #include <mapidbg.h>    #include <stdio.h>    #include <conio.h>    #include <mspab.h>    static   LPMAPISESSION    lpSession =                NULL;    static   LPMDB            lpStore =                  NULL;    static   CHAR             szStore[MAX_PATH + 1] =    {0};    static   ULONG            cbEIDStore  =              0;    static   LPENTRYID        lpEIDStore =               NULL;    static   CHAR             szFolder[MAX_PATH + 1] =   {0};    static   LPMAPIFOLDER     lpFolder =                 NULL;    static   ULONG            cbEIDFolder =              0;    static   LPENTRYID        lpEIDFolder =              NULL;    HRESULT Logon ( LPMAPISESSION *pSession )    {      HRESULT hRes = S_OK;      LPMAPISESSION pLocalSession = NULL;      ULONG ulFlags = 0L;      if ( FAILED ( hRes = MAPIInitialize ( NULL ) ) )         goto Quit;      ulFlags = MAPI_EXTENDED |                MAPI_LOGON_UI |                MAPI_EXPLICIT_PROFILE |                MAPI_NEW_SESSION;      if ( FAILED ( hRes = MAPILogonEx ( 0l,                                         NULL,                                         NULL,                                         ulFlags,                                         &pLocalSession ) ) )         goto Quit;      *pSession = pLocalSession;    Quit:      return hRes;    }    HRESULT ModifyACLS ( )    {      LPSRowSet      pRows   =      NULL;      HRESULT        hr =           S_OK;      ULONG          ulUIParam =    0;      LPCIID         lpInterface =  NULL;      ULONG          ulFlags =      MAPI_BEST_ACCESS;      ULONG          ulObjType =    0;      LPSTR          mstr =         NULL;      LPMAPITABLE    m_lpMapiTbl=   NULL;      ULONG          ulFlagsTable = 0;      ULONG          lpulCount =    NULL;      LPMDB          lpMailbox =    NULL;      LPEXCHANGEMODIFYTABLE m_lpExchTbl =   NULL;      SizedSPropTagArray ( 2, sptCols ) = { 2,                                            PR_ENTRYID,                                            PR_DISPLAY_NAME };      // Logon to MAPI Session      hr = Logon ( &lpSession );      if (FAILED(hr))      {         MessageBox(NULL,"MAPI Logon failed",NULL,MB_OK);         goto cleanup;      }      // Get entry ID of the Public Folders store      hr = HrMAPIFindStore(lpSession,                           "Public Folders",                           &cbEIDStore,                           &lpEIDStore);      if (FAILED(hr))      {         MessageBox(NULL,"Message Store Not Found",NULL,MB_OK);         goto cleanup;      }      // Open the Public Folders store      hr = lpSession->OpenMsgStore(ulUIParam,                                   cbEIDStore,                                   lpEIDStore,                                   lpInterface,                                   ulFlags,                                   &lpStore);      if (FAILED(hr))      {         MessageBox(NULL,"Message Store Not Opened",NULL,MB_OK);         goto cleanup;      }      // Logon to server and mailbox - as admin      hr = HrMailboxLogon(lpSession,                          lpStore,                          STR_DN_SERVERNAME,                          NULL, &lpMailbox);      if (FAILED(hr))      {         MessageBox(NULL,"HrMailBoxLogon Failed",NULL,MB_OK);         goto cleanup;      }      strcpy(szFolder, STR_FOLDER_NAME);      // Get entry ID of specific public folder      hr = HrMAPIFindFolderEx(lpMailbox,                              '\\',                              szFolder,                              &cbEIDFolder,                              &lpEIDFolder);      if (FAILED(hr))      {         MessageBox(NULL,"Folder Not Found",NULL,MB_OK);         goto cleanup;      }      // Open the folder in an IMAPIFolder interface      hr = lpMailbox->OpenEntry(cbEIDFolder,                                lpEIDFolder,                                NULL,                                MAPI_BEST_ACCESS,                                &ulObjType,                                (LPUNKNOWN FAR *)&lpFolder);      if (FAILED(hr))      {         MessageBox(NULL,"Folder Could Not Be Opened",NULL,MB_OK);         goto cleanup;      }      // Open the ACL table in an IExchangeModifyTable interface      hr = lpFolder->OpenProperty(PR_ACL_TABLE,                                  (LPGUID)&IID_IExchangeModifyTable,                                  0,                                  MAPI_DEFERRED_ERRORS,                                  (LPUNKNOWN FAR *)&m_lpExchTbl);      if (FAILED(hr))         goto cleanup;      // Open a MAPI table on the ACL table property.  This table can be      // read to determine what the ACL table looks like.      hr = m_lpExchTbl->GetTable(0, &m_lpMapiTbl);      if (FAILED(hr))      {         hr = HR_LOG(E_FAIL);         goto cleanup;      }      hr = m_lpMapiTbl->GetRowCount(ulFlagsTable,&lpulCount);      if (FAILED(hr))      {         goto cleanup;      }      hr = HrQueryAllRows(m_lpMapiTbl,NULL, NULL, NULL, lpulCount,&pRows);      if (FAILED(hr))      {         goto cleanup;      }    // You now have the PR_ACL_DATA in a SRowSet structure.    cleanup:      if (lpSession)      {         lpSession->Logoff(0, 0, 0);         ULRELEASE(lpSession);      }      MAPIUninitialize();      return 0;    }				

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 197743 - Última Revisão: 01/10/2015 11:39:52 - Revisão: 2.2

Microsoft Exchange Development Kit 5.5, Microsoft Exchange Server 2003 Software Development Kit

  • kbnosurvey kbarchive kbmt kbhowto kbmsg KB197743 KbMtpt
Comentários