SetSecurityDescriptorDacl-Funktion (securitybaseapi.h)
Die SetSecurityDescriptorDacl-Funktion legt Informationen in einer daCL (Discretionary Access Control List ) fest. Wenn bereits eine DACL im Sicherheitsdeskriptor vorhanden ist, wird die DACL ersetzt.
Syntax
BOOL SetSecurityDescriptorDacl(
[in, out] PSECURITY_DESCRIPTOR pSecurityDescriptor,
[in] BOOL bDaclPresent,
[in, optional] PACL pDacl,
[in] BOOL bDaclDefaulted
);
Parameter
[in, out] pSecurityDescriptor
Ein Zeiger auf die SECURITY_DESCRIPTOR-Struktur , zu der die Funktion die DACL hinzufügt. Dieser Sicherheitsdeskriptor muss im absoluten Format vorliegen, was bedeutet, dass seine Member auf andere Strukturen zeigen müssen, anstatt auf zusammenhängende Daten zu verstellen.
[in] bDaclPresent
Ein Flag, das das Vorhandensein einer DACL im Sicherheitsdeskriptor angibt. Wenn dieser Parameter TRUE ist, legt die Funktion das SE_DACL_PRESENT-Flag in der SECURITY_DESCRIPTOR_CONTROL-Struktur fest und verwendet die Werte in den Parametern pDacl und bDaclDefaulted . Wenn dieser Parameter FALSE ist, löscht die Funktion das flag SE_DACL_PRESENT, und pDaclund bDaclDefaulted werden ignoriert.
[in, optional] pDacl
Ein Zeiger auf eine ACL-Struktur , die die DACL für den Sicherheitsdeskriptor angibt. Wenn dieser Parameter NULL ist, wird dem Sicherheitsdeskriptor eine NULL-DACL zugewiesen, die den gesamten Zugriff auf das Objekt zulässt. Auf die DACL wird vom Sicherheitsdeskriptor verwiesen und nicht in diese kopiert.
[in] bDaclDefaulted
Ein Flag, das die Quelle der DACL angibt. Wenn dieses Flag TRUE ist, wurde die DACL von einem Standardmechanismus abgerufen. Bei FALSE wurde die DACL explizit von einem Benutzer angegeben. Die Funktion speichert diesen Wert im SE_DACL_DEFAULTED-Flag der SECURITY_DESCRIPTOR_CONTROL-Struktur . Wenn dieser Parameter nicht angegeben ist, wird das flag SE_DACL_DEFAULTED gelöscht.
Rückgabewert
Wenn die Funktion erfolgreich ist, gibt die Funktion ungleich null zurück.
Wenn die Funktion fehlschlägt, wird null zurückgegeben. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Hinweise
Es gibt einen wichtigen Unterschied zwischen einer leeren und einer nicht vorhandenen DACL. Wenn eine DACL leer ist, enthält sie keine Zugriffssteuerungseinträge (AcEs ); Daher werden keine Zugriffsrechte explizit gewährt. Daher wird der Zugriff auf das Objekt implizit verweigert.
Wenn ein Objekt über keine DACL verfügt (wenn der pDacl-ParameterNULL ist), wird dem Objekt kein Schutz zugewiesen, und alle Zugriffsanforderungen werden gewährt. Um die Sicherheit zu gewährleisten, beschränken Sie den Zugriff mithilfe einer DACL.
Es gibt drei mögliche Ergebnisse in verschiedenen Konfigurationen des bDaclPresent-Flags und des pDacl-Parameters :
- Wenn der pDacl-Parameter auf eine DACL zeigt und das bDaclPresent-FlagTRUE ist, wird eine DACL angegeben, die zugriffsgeschützte ACEs enthalten muss, um den Zugriff auf das Objekt zu ermöglichen.
- Wenn der pDacl-Parameter nicht auf eine DACL verweist und das bDaclPresent-FlagTRUE ist, wird eine NULL-DACL angegeben. Der gesamte Zugriff ist zulässig. Sie sollten keine NULL-DACL mit einem -Objekt verwenden, da jeder Benutzer die DACL und den Besitzer des Sicherheitsdeskriptors ändern kann. Dies beeinträchtigt die Verwendung des -Objekts.
- Wenn der pDacl-Parameter nicht auf eine DACL zeigt und das bDaclPresent-FlagFALSE ist, kann eine DACL für das Objekt über einen Vererbungs- oder Standardmechanismus bereitgestellt werden.
Beispiele
Ein Beispiel, das diese Funktion verwendet, finden Sie unter Erstellen eines Sicherheitsdeskriptors für ein neues Objekt.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | securitybaseapi.h (Einschließen von Windows.h) |
Bibliothek | Advapi32.lib |
DLL | Advapi32.dll |