SeAssignSecurityEx-Funktion (wdm.h)

Die SeAssignSecurityEx-Routine erstellt einen selbstrelativen Sicherheitsdeskriptor für ein neues Objekt unter Berücksichtigung der folgenden optionalen Parameter: einen Sicherheitsdeskriptor des übergeordneten Verzeichnisses des Objekts, einen expliziten Sicherheitsdeskriptor für das Objekt und den Objekttyp.

Syntax

NTSTATUS SeAssignSecurityEx(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in, optional] GUID                      *ObjectType,
  [in]           BOOLEAN                   IsDirectoryObject,
  [in]           ULONG                     AutoInheritFlags,
  [in]           PSECURITY_SUBJECT_CONTEXT SubjectContext,
  [in]           PGENERIC_MAPPING          GenericMapping,
  [in]           POOL_TYPE                 PoolType
);

Parameter

[in, optional] ParentDescriptor

Zeiger auf die SECURITY_DESCRIPTOR des übergeordneten Objekts, das das neu erstellte Objekt enthält. ParentDescriptor kann NULL sein oder über eine NULL-Systemzugriffssteuerungsliste (SACL) oder eine NULL-Zugriffssteuerungsliste (DACL) verfügen.

[in, optional] ExplicitDescriptor

Zeiger auf eine explizite SECURITY_DESCRIPTOR , die auf das neue Objekt angewendet wird. ExplicitDescriptor kann NULL sein oder eine NULL-SACL - oder NULL-DACL aufweisen.

[out] NewDescriptor

Empfängt einen Zeiger auf die zurückgegebene SECURITY_DESCRIPTOR. SeAssignSecurityEx weist den Puffer aus dem ausgelagerten Speicherpool zu.

[in, optional] ObjectType

Zeiger auf eine GUID für den Typ des zu erstellenden Objekts. Wenn das Objekt keine GUID aufweist, muss ObjectType auf NULL festgelegt werden.

[in] IsDirectoryObject

Gibt an, ob das neue Objekt ein Verzeichnisobjekt ist. Wenn IsDirectoryObject auf TRUE festgelegt ist, ist das neue Objekt ein Verzeichnisobjekt, andernfalls ist das neue Objekt kein Verzeichnisobjekt.

[in] AutoInheritFlags

Gibt den Typ der automatischen Vererbung an, der auf Zugriffssteuerungseinträge (Access Control Entries, ACE) in den von ParentDescriptor angegebenen Zugriffssteuerungslisten (Access Control Lists, ACL) angewendet wird. AutoInheritFlags steuert auch die Berechtigungsüberprüfung, die Besitzerüberprüfung und das Festlegen eines Standardbesitzers und einer Standardgruppe für NewDescriptor. AutoInheritFlags muss auf ein logisches OR mit einem oder mehreren der folgenden Werte festgelegt werden:

Wert Bedeutung
SEF_DACL_AUTO_INHERIT ACEs in der DACL von ParentDescriptor werden zusätzlich zu expliziten ACEs, die von ExplicitDescriptor angegeben werden, von NewDescriptor geerbt.
SEF_SACL_AUTO_INHERIT ACEs in der SACL von ParentDescriptor werden zusätzlich zu expliziten ACEs, die von ExplicitDescriptor angegeben werden, von NewDescriptor geerbt.
SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT ExplicitDescriptor ist der Standarddeskriptor für den durch ObjectType angegebenen Objekttyp. ExplicitDescriptor wird nicht verwendet, wenn ACEs von ParentDescriptor geerbt werden.
SEF_AVOID_PRIVILEGE_CHECK Die Berechtigungsüberprüfung wird nicht durchgeführt. Dieses Flag ist bei der automatischen Vererbung nützlich, da es die Berechtigungsprüfung für jedes untergeordnete Element vermeidet, das aktualisiert werden muss.
SEF_AVOID_OWNER_CHECK Die Besitzerüberprüfung wird nicht durchgeführt.
SEF_DEFAULT_OWNER_FROM_PARENT Wenn ein Besitzer von ExplicitDescriptor angegeben wird, wird dieses Flag nicht verwendet, und der Besitzer von NewDescriptor wird auf den von ExplictDescriptor angegebenen Besitzer festgelegt.

Wenn ein Besitzer nicht von ExplicitDescriptor angegeben wird, wird dieses Flag wie folgt verwendet: Wenn das Flag festgelegt ist, wird der Besitzer von NewDescriptor auf den Besitzer von ParentDescriptor festgelegt. Andernfalls wird der Besitzer von NewDescriptor auf den von SubjectContext angegebenen Besitzer festgelegt.

SEF_DEFAULT_GROUP_FROM_PARENT Wenn eine Gruppe von ExplicitDescriptor angegeben wird, wird dieses Flag nicht verwendet, und die Gruppe von NewDescriptor wird auf die durch ExplictDescriptor angegebene Gruppe festgelegt.

Wenn eine Gruppe nicht von ExplicitDescriptor angegeben wird, wird dieses Flag wie folgt verwendet: Wenn das Flag festgelegt ist, wird die Gruppe von NewDescriptor auf die Gruppe von ParentDescriptor festgelegt. Andernfalls wird die Gruppe von NewDescriptor auf die durch SubjectContext angegebene Gruppe festgelegt.

 

Die Zuweisung von System- und Ermessens-ACLs wird in der folgenden Tabelle beschrieben:

Nicht standardmäßige explizite Deskriptor(1) Expliziter Standarddeskriptor(2) NULL Expliziter Deskriptor
Die ACL wird vom übergeordneten Deskriptor(3) geerbt. Weisen Sie sowohl geerbte als auch explizite ACLs(5)(6) zu. Weisen Sie geerbte ACL zu. Weisen Sie geerbte ACL zu.
Die ACL wird nicht vom übergeordneten Deskriptor(4) geerbt. Weisen Sie nicht standardmäßige ACL zu. Weisen Sie die Standard-ACL zu. Weisen Sie keine ACL zu.
 

Hinweise zur Zuweisung

  1. Das flag SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT ist nicht angegeben.
  2. Das flag SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT wird angegeben.
  3. Das Flag für automatisches Erben für eine ACL wird angegeben (SEF_DACL_AUTO_INHERIT oder SEF_SACL_AUTO_INHERIT).
  4. Das Flag für automatisches Erben für eine ACL ist nicht angegeben.
  5. ACEs, deren INHERITED_ACE Bit in ihrem AceFlags-Member festgelegt ist, werden nicht in den zugewiesenen Sicherheitsdeskriptor kopiert.
  6. ACEs, die vom übergeordneten Deskriptor geerbt werden, werden nach den vom expliziten Deskriptor angegebenen ACEs angefügt.

[in] SubjectContext

Zeiger auf einen Sicherheitskontext des Betreffs, der das Objekt erstellt. SubjectContext wird verwendet, um Standardsicherheitsinformationen für das neue Objekt abzurufen, einschließlich des Standardbesitzers, der primären Gruppe und der freien Zugriffssteuerung.

[in] GenericMapping

Zeiger auf ein Array von Zugriffsmaskenwerten, die die Zuordnung zwischen den einzelnen generischen Rechten zu objektspezifischen Rechten angeben.

[in] PoolType

Dieser Parameter wird nicht verwendet. Der Puffer, der den neuen Sicherheitsdeskriptor enthält, wird immer aus einem ausgelagerten Pool zugeordnet.

Rückgabewert

SeAssignSecurityEx gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS
Die Zuweisung war erfolgreich.
STATUS_INVALID_OWNER
Die als Besitzer des neuen Sicherheitsdeskriptors bereitgestellte SID ist keine SID, die der Aufrufer als Besitzer eines Objekts zuweisen darf.
STATUS_PRIVILEGE_NOT_HELD
Der Aufrufer verfügt nicht über die Berechtigung (SeSecurityPrivilege), die erforderlich ist, um die angegebene SACL explizit zuzuweisen.

Hinweise

SeAssignSecurityEx erweitert den grundlegenden Betrieb von SeAssignSecurity auf folgende Weise:

  • ObjectType gibt optional einen Objekttyp an. Die objektspezifische Vererbung wird durch die folgenden Member eines objektspezifischen ACE gesteuert: Flags, InheritedObjectType und Header.AceFlags.
  • AutoInheritFlags gibt den Typ der automatischen Vererbung von ACEs an, die verwendet wird. AutoInheritFlags steuert auch die Berechtigungsüberprüfung, die Besitzerüberprüfung und das Festlegen eines Standardbesitzers und einer Standardgruppe für NewDescriptor.
Weitere Informationen zur Sicherheit und Zugriffssteuerung finden Sie in der Dokumentation zu diesen Themen im Microsoft Windows SDK.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDDIs(storport)

Weitere Informationen

GENERIC_MAPPING

SECURITY_DESCRIPTOR

SeAssignSecurity

SeDeassignSecurity