RtlCreateAcl-Funktion (ntifs.h)
Die RtlCreateAcl Routine erstellt und initialisiert eine Zugriffssteuerungsliste (Access Control List, ACL).
Syntax
NTSYSAPI NTSTATUS RtlCreateAcl(
[out] PACL Acl,
[in] ULONG AclLength,
ULONG AclRevision
);
Parameter
[out] Acl
Zeigen Sie auf einen vom Aufrufer zugewiesenen Puffer, um die initialisierte ACL-Struktur zu empfangen. Dieser Puffer muss mindestens Größe von(ACL) sein.
[in] AclLength
Länge des Puffers in Bytes, auf den der Acl Parameter verweist. Dieser Wert muss groß genug sein, um den ACL-Header und alle Zugriffssteuerungseinträge (Access-Control Entries, ACE) zu enthalten, die in der ACL gespeichert werden sollen. Informationen zum Berechnen der Größe einer ACL finden Sie im folgenden Abschnitt "Hinweise".
AclRevision
ACL-Revisionsebene der zu hinzufügenden ACE. Windows-Versionsanforderungen sind die folgenden:
Wert | Bedeutung |
---|---|
|
Die Revisionsebene, die für alle Windows-Versionen gültig ist. |
|
HinweisAceRevision muss ACL_REVISION_DS werden, wenn die ACL in Acl- eine objektspezifische ACE enthält.
|
Rückgabewert
RtlCreateAcl kann einen der folgenden Statuswerte zurückgeben:
Rückgabecode | Beschreibung |
---|---|
|
Die ACL wurde erfolgreich erstellt und initialisiert. |
|
Die neue ACL passt nicht in den Puffer bei Acl-. Ein größerer ACL-Puffer ist erforderlich. |
|
Die angegebene Überarbeitung ist nicht aktuell, oder der Wert AclLength ist zu groß. |
Bemerkungen
Die ACL, die von RtlCreateAcl initialisiert wird enthält keine Zugriffssteuerungseinträge (Access Control Entries, ACE). Diese ACL ist leer, im Gegensatz zu einer nicht vorhandenen ACL. Wenn eine leere ACL auf ein Objekt angewendet wird, verweigert die ACL implizit den gesamten Zugriff auf dieses Objekt. Um acEs zur ACL hinzuzufügen, verwenden Sie RtlAddAccessAllowedAce.
Um die Größe einer ACL zu berechnen, fügen Sie Größe von(ACL) zur Größe aller ACEs hinzu, die in der ACL gespeichert werden sollen. Um die Größe einer ACE zu berechnen, fügen Sie die Größe der ACE-Struktur hinzu, z. B. Sizeof(ACCESS_ALLOWED_ACE), zur Länge der SID, die der ACE zugeordnet ist, und subtrahieren Sie dann die Größe des SidStart Member (das Teil der ACE-Struktur und der SID ist). Verwenden Sie die RtlLengthSid--Funktion, um die Länge einer angegebenen SID abzurufen.
Das folgende Beispiel zeigt, wie Die Größe einer zugriffsgeschützten ACE berechnet wird:
sizeof (ACCESS_ALLOWED_ACE) - sizeof (ACCESS_ALLOWED_ACE.SidStart)
+ GetLengthSid (pAceSid);
Um die Größe einer ACL zu berechnen, verwenden Sie den folgenden Algorithmus, und ersetzen Sie die entsprechende ACE-Struktur im Sizeof(ACE)-Ausdruck:
cbAcl = sizeof (ACL);
for (i = 0 ; i < nAceCount ; i++) {
// subtract ACE.SidStart from the size
cbAce = sizeof (ACE) - sizeof (DWORD);
// add this ACE's SID length
cbAce += GetLengthSid (pAceSid[i]);
// add the length of each ACE to the total ACL length
cbAcl += cbAce;
}
Weitere Informationen zur Sicherheits- und Zugriffssteuerung finden Sie unter Windows-Sicherheitsmodell für Treiberentwickler und die Dokumentation zu diesen Themen im Windows SDK.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | ntifs.h (einschließlich Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | <= APC_LEVEL |