Gewusst wie: die ACLs für Ordner abrufen Sie nicht Besitzer werden

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

197743
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Zusammenfassung
Dieser Artikel veranschaulicht die Zugriffssteuerungsliste (ACL) eines Öffentlichen Ordners zuzugreifen, die nicht im Besitz des zurzeit angemeldeten Benutzers ist. Während der Beispielcode für diesen Zweck spezifisch ist, kann denselben Code einfach zugreifen oder ändern die ACLs eines beliebigen Ordners alle Informationsspeicher geändert werden.
Weitere Informationen
Die Zugriffssteuerungsliste für alle angegebenen Microsoft Exchange-Ordner ist in PR_ACL_DATA oder PR_ACL_TABLE Eigenschaften des Ordners enthalten.

Die folgenden Funktionen werden zur ACLs in einem öffentlichen Ordner in einer Exchange-Informationsspeicher zugreifen. Um die Daten in der PR_ACL_DATA-Eigenschaft zu überprüfen, müssen Sie die Daten in eine SRowSet-Struktur abrufen. Abrufen dieser Informationen in die Struktur SRowSet ist der primäre Zweck des folgenden Codes.

Die folgenden Bibliotheken müssen statisch mit Ihrem Projekt verknüpft sein:
  • Kernel32.lib
  • User32.lib
  • Version.lib
  • Advapi32.lib
  • Msvcrt.lib
  • Mapi32.lib
  • Edkguid.lib
  • Edkutils.lib
  • Edkmapi.lib
  • Addrlkup.lib
  • Edkdebug.lib
  • Mblogon.lib

Codebeispiel

    // 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;    }				

Warnung: Dieser Artikel wurde automatisch übersetzt

Eigenschaften

Artikelnummer: 197743 – Letzte Überarbeitung: 01/10/2015 11:39:47 – Revision: 2.2

  • Microsoft Exchange Development Kit 5.5
  • Microsoft Exchange Server 2003 Software Development Kit
  • kbnosurvey kbarchive kbmt kbhowto kbmsg KB197743 KbMtde
Feedback