Erstellen oder Ändern einer ACL

Windows unterstützt eine Reihe von Funktionen, die eine Zugriffssteuerungsliste (Access Control List , ACL) erstellen oder die Zugriffssteuerungseinträge (Access Control Entries , ACEs) in einer vorhandenen Zugriffssteuerungsliste ändern.

Die SetEntriesInAcl-Funktion erstellt eine neue ACL. SetEntriesInAcl kann einen vollständig neuen Satz von ACEs für die ACL angeben oder ein oder mehrere neue ACEs mit den ACEs einer vorhandenen ACL zusammenführen. Die SetEntriesInAcl-Funktion verwendet ein Array von EXPLICIT_ACCESS Strukturen, um die Informationen für die neuen ACEs anzugeben. Jede EXPLICIT_ACCESS-Struktur enthält Informationen, die einen einzelnen ACE beschreiben. Diese Informationen umfassen die Zugriffsrechte, den Ace-Typ, die Flags, die die ACE-Vererbung steuern, und eine TRUSTEE-Struktur , die den Treuhänder identifiziert.

So fügen Sie einer vorhandenen ACL einen neuen ACE hinzu

  1. Verwenden Sie die GetSecurityInfo - oder GetNamedSecurityInfo-Funktion , um die vorhandene DACL oder SACL aus dem Sicherheitsdeskriptor eines Objekts abzurufen.
  2. Rufen Sie für jeden neuen ACE die Funktion BuildExplicitAccessWithName auf, um eine EXPLICIT_ACCESS-Struktur mit den Informationen zu füllen, die den ACE beschreiben.
  3. Rufen Sie SetEntriesInAcl auf, und geben Sie die vorhandene ACL und ein Array von EXPLICIT_ACCESS Strukturen für die neuen ACEs an. Die SetEntriesInAcl-Funktion ordnet die ACL und ihre ACEs zu und initialisiert sie.
  4. Rufen Sie die Funktion SetSecurityInfo oder SetNamedSecurityInfo auf, um die neue ACL an den Sicherheitsdeskriptor des Objekts anzufügen.

Wenn der Aufrufer eine vorhandene ACL angibt, führt SetEntriesInAcl die neuen ACE-Informationen mit den vorhandenen ACEs in der ACL zusammen. Betrachten Sie beispielsweise den Fall, in dem die vorhandene Zugriffssteuerungsliste einem angegebenen Treuhänder Zugriff gewährt und eine EXPLICIT_ACCESS-Struktur demselben Treuhänder den Zugriff verweigert. In diesem Fall fügt SetEntriesInAcl dem Treuhänder eine neue Zugriffsverweigerungs-ACE hinzu und löscht oder ändert den vorhandenen zugriffsgeschützten ACE für den Treuhänder.

Beispielcode, der eine neue ACE in einer vorhandenen ACL zusammenführt, finden Sie unter Ändern der ACLs eines Objekts in C++.