Erstellen oder Ändern einer ACL
Windows unterstützt eine Reihe von Funktionen, die eine Zugriffssteuerungsliste (Access Control List, ACL) erstellen oder die Zugriffssteuerungseinträge (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 eine 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 VERTRAUENSNEHMER-Struktur, die den Vertrauensnehmer identifiziert.
So fügen Sie einer vorhandenen ACL einen neuen ACE hinzu
- Verwenden Sie die Funktion GetSecurityInfo oder GetNamedSecurityInfo, um die vorhandene DACL oder SACL aus dem Sicherheitsdeskriptoreines Objekts abzurufen.
- Rufen Sie für jeden neuen ACE die BuildExplicitAccessWithName-Funktion auf, um eine EXPLICIT _ ACCESS-Struktur mit den Informationen zu füllen, die den ACE beschreiben.
- Rufen Sie SetEntriesInAclauf, und geben Sie dabei die vorhandene Zugriffssteuerungsliste 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.
- 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. Stellen Sie sich beispielsweise den Fall vor, in dem die vorhandene ACL einem angegebenen Vertrauensnehmer Zugriff gewährt und eine EXPLICIT _ ACCESS-Struktur den Zugriff auf denselben Vertrauensnehmer verweigert. In diesem Fall fügt SetEntriesInAcl einen neuen ACE mit Zugriffsverweigerung für den Vertrauensnehmer hinzu und löscht oder ändert den vorhandenen Zugriffsberechtigungs-ACE für den Vertrauensnehmer.
Beispielcode, der einen neuen ACE in einer vorhandenen ACL zusammenführt, finden Sie unter Ändern der ACLs eines Objekts in C++.