CreatePrivateObjectSecurityEx-Funktion (securitybaseapi.h)
Die CreatePrivateObjectSecurityEx-Funktion ordnet und initialisiert einen selbstrelativen Sicherheitsdeskriptor für ein neues privates Objekt, das vom Ressourcen-Manager erstellt wurde, der diese Funktion aufruft.
Syntax
BOOL CreatePrivateObjectSecurityEx(
[in, optional] PSECURITY_DESCRIPTOR ParentDescriptor,
[in, optional] PSECURITY_DESCRIPTOR CreatorDescriptor,
[out] PSECURITY_DESCRIPTOR *NewDescriptor,
[in, optional] GUID *ObjectType,
[in] BOOL IsContainerObject,
[in] ULONG AutoInheritFlags,
[in, optional] HANDLE Token,
[in] PGENERIC_MAPPING GenericMapping
);
Parameter
[in, optional] ParentDescriptor
Ein Zeiger auf den Sicherheitsdeskriptor für den übergeordneten Container des Objekts. Wenn kein übergeordneter Container vorhanden ist, ist dieser Parameter NULL.
[in, optional] CreatorDescriptor
Ein Zeiger auf einen Sicherheitsdeskriptor, der vom Ersteller des Objekts bereitgestellt wird. Wenn der Ersteller des Objekts nicht explizit Sicherheitsinformationen für das neue Objekt übergibt, kann dieser Parameter NULL sein. Alternativ kann dieser Parameter auf einen Standardsicherheitsdeskriptor verweisen.
[out] NewDescriptor
Ein Zeiger auf eine Variable, die einen Zeiger auf den neu zugeordneten selbstrelativen Sicherheitsdeskriptor empfängt. Wenn Sie die Verwendung des Sicherheitsdeskriptors abgeschlossen haben, geben Sie ihn frei, indem Sie die
DestroyPrivateObjectSecurity-Funktion .
[in, optional] ObjectType
Ein Zeiger auf eine GUID-Struktur , die den Typ des Objekts identifiziert, das NewDescriptor zugeordnet ist. Wenn das Objekt keine GUID aufweist, legen Sie ObjectType auf NULL fest.
[in] IsContainerObject
Gibt an, ob das neue Objekt andere Objekte enthalten kann. Der Wert TRUE gibt an, dass das neue Objekt ein Container ist. Der Wert FALSE gibt an, dass das neue Objekt kein Container ist.
[in] AutoInheritFlags
Eine Reihe von Bitflags, die steuern, wie Zugriffssteuerungseinträge (Access Control Entries , ACEs) von ParentDescriptor geerbt werden. Für diesen Parameter ist eine Kombination der folgenden Werte gültig.
Wert | Bedeutung |
---|---|
|
Die Funktion überprüft nicht die Gültigkeit des Besitzers im resultierenden NewDescriptor , wie in Den Hinweisen unten beschrieben. Wenn auch das flag SEF_AVOID_PRIVILEGE_CHECK festgelegt ist, kann der TokenparameterNULL sein. |
|
Alle vom ParentDescriptor angegebenen Einschränkungen, die die Fähigkeit des Aufrufers, eine DACL im CreatorDescriptor anzugeben, einschränken würden, werden ignoriert. |
|
Die Funktion führt keine Berechtigungsüberprüfung aus. Wenn auch das flag SEF_AVOID_OWNER_CHECK festgelegt ist, kann der TokenparameterNULL sein. Dieses Flag ist bei der Implementierung der automatischen Vererbung nützlich, um zu vermeiden, dass die Berechtigungen für die einzelnen aktualisierten untergeordneten Elemente überprüft werden. |
|
Die neue DACL (Discretionary Access Control List ) enthält ACEs, die von der DACL von ParentDescriptor geerbt werden, sowie alle expliziten ACEs, die in der DACL von CreatorDescriptor angegeben sind. Wenn dieses Flag nicht festgelegt ist, erbt die neue DACL keine ACEs. |
|
CreatorDescriptor ist der Standarddeskriptor für den Objekttyp, der durch ObjectType angegeben wird. Daher wird CreatorDescriptor ignoriert, wenn ParentDescriptor über objektspezifische ACEs für den Objekttyp verfügt, der durch den ObjectType-Parameter angegeben wird. Wenn keine solchen ACEs geerbt werden, wird CreatorDescriptor so behandelt, als ob dieses Flag nicht angegeben wäre. |
|
Die Gruppe von NewDescriptor ist standardmäßig die Gruppe aus ParentDescriptor. Wenn nicht festgelegt, wird die Gruppe von NewDescriptor standardmäßig auf die Gruppe des Tokens festgelegt, die durch den Token-Parameter angegeben wird. Die Gruppe des Tokens wird im Token selbst angegeben. Wenn der CreatorDescriptor-Parameter in beiden Fällen nicht NULL ist, wird die Gruppe NewDescriptor auf die Gruppe von CreatorDescriptor festgelegt. |
|
Der Besitzer von NewDescriptor verwendet standardmäßig den Besitzer von ParentDescriptor. Wenn dieser Wert nicht festgelegt ist, ist der Besitzer von NewDescriptor standardmäßig der Besitzer des durch den Token-Parameter angegebenen Tokens. Der Besitzer des Tokens wird im Token selbst angegeben. Wenn der CreatorDescriptor-Parameter in beiden Fällen nicht NULL ist, wird der NewDescriptor-Besitzer von CreatorDescriptor auf den Besitzer festgelegt. |
|
Wenn dieses Flag festgelegt ist, wird die obligatorische Bezeichnung ACE in CreatorDescriptor nicht verwendet, um eine obligatorische Bezeichnung ACE in NewDescriptor zu erstellen. Stattdessen wird NewDescriptor eine neue SYSTEM_MANDATORY_LABEL_ACE mit einer Zugriffsmaske von SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP und der SID aus der Integritäts-SID des Tokens hinzugefügt. |
|
Wenn dieses Flag festgelegt ist, wird die obligatorische Bezeichnung ACE in CreatorDescriptor nicht verwendet, um eine obligatorische Bezeichnung ACE in NewDescriptor zu erstellen. Stattdessen wird NewDescriptor eine neue SYSTEM_MANDATORY_LABEL_ACE mit einer Zugriffsmaske von SYSTEM_MANDATORY_LABEL_NO_READ_UP und der SID aus der Integritäts-SID des Tokens hinzugefügt. |
|
Wenn dieses Flag festgelegt ist, wird die obligatorische Bezeichnung ACE in CreatorDescriptor nicht verwendet, um eine obligatorische Bezeichnung ACE in NewDescriptor zu erstellen. Stattdessen wird NewDescriptor eine neue SYSTEM_MANDATORY_LABEL_ACE mit einer Zugriffsmaske von SYSTEM_MANDATORY_LABEL_NO_WRITE_UP und der SID aus der Integritäts-SID des Tokens hinzugefügt. |
|
Die neue Systemzugriffssteuerungsliste (SACL) enthält ACEs, die von der SACL von ParentDescriptor geerbt werden, sowie alle expliziten ACEs, die in der SACL von CreatorDescriptor angegeben sind. Wenn dieses Flag nicht festgelegt ist, erbt die neue SACL keine ACEs. |
[in, optional] Token
Ein Handle für das Zugriffstoken für den Clientprozess, in dessen Auftrag das Objekt erstellt wird. Wenn es sich um ein Identitätswechseltoken handelt, muss es sich auf der SecurityIdentification-Ebene oder höher sein. Eine vollständige Beschreibung der Identitätswechselebene von SecurityIdentification finden Sie unter SECURITY_IMPERSONATION_LEVEL aufgezählten Typ.
Das Clienttoken enthält Standardsicherheitsinformationen, z. B. den Standardbesitzer, die primäre Gruppe und die DACL. Die Funktion verwendet diese Standardwerte, wenn die Informationen nicht in den Eingabesicherheitsdeskriptoren enthalten sind. Das Token muss für TOKEN_QUERY Zugriff geöffnet sein.
Wenn alle folgenden Bedingungen zutreffen, muss das Handle zusätzlich zu TOKEN_QUERY Zugriff für TOKEN_DUPLICATE Zugriff geöffnet werden.
- Das Tokenhandle bezieht sich auf ein primäres Token.
- Der Sicherheitsdeskriptor des Tokens enthält mindestens ein ACEs mit der OwnerRights-SID .
- Für den CreatorDescriptor-Parameter wird ein Sicherheitsdeskriptor angegeben.
- Der Aufrufer dieser Funktion legt das SEF_AVOID_OWNER_RESTRICTION-Flag im AutoInheritFlags-Parameter nicht fest.
[in] GenericMapping
Ein Zeiger auf eine GENERIC_MAPPING-Struktur , die die Zuordnung von jedem generischen Recht zu bestimmten Rechten für das Objekt angibt.
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. Einige der erweiterten Fehlercodes und ihre Bedeutungen sind in der folgenden Tabelle aufgeführt.
Rückgabecode | Beschreibung |
---|---|
|
Die Funktion kann keinen Besitzer für den neuen Sicherheitsdeskriptor abrufen, oder die SID kann nicht als Besitzer zugewiesen werden. Dies tritt auf, wenn die Besitzer-SID mit dem übergebenen Token überprüft wird. |
|
Die Funktion kann keine primäre Gruppe für den neuen Sicherheitsdeskriptor abrufen. |
|
Die Funktion hat NULL anstelle eines Tokens für die Besitzerüberprüfung oder Berechtigungsüberprüfung empfangen. |
|
Es wird eine SACL festgelegt, SEF_AVOID_PRIVILEGE_CHECK nicht übergeben wurde, und für das übergebene Token wurde SE_SECURITY_NAME nicht aktiviert. |
Hinweise
Die CreatePrivateObjectSecurity-Funktion ist identisch mit dem Aufrufen der CreatePrivateObjectSecurityEx-Funktion , wobei ObjectType auf NULL und AutoInheritFlags auf Null festgelegt ist.
Der AutoInheritFlags-Parameter unterscheidet sich von den ähnlich benannten Bits im Control-Element der SECURITY_DESCRIPTOR-Struktur . Eine Erläuterung der Steuerelementbits finden Sie unter SECURITY_DESCRIPTOR_CONTROL.
Wenn AutoInheritFlags das SEF_DACL_AUTO_INHERIT Bit angibt, wendet die Funktion die folgenden Regeln auf die DACL im neuen Sicherheitsdeskriptor an:
- Das flag SE_DACL_AUTO_INHERITED wird im Control-Element des neuen Sicherheitsdeskriptors festgelegt.
- Die DACL des neuen Sicherheitsdeskriptors erbt ACEs vom ParentDescriptor , unabhängig davon, ob CreatorDescriptor der Standardsicherheitsdeskriptor ist oder vom Ersteller explizit angegeben wurde. Die neue DACL ist eine Kombination der übergeordneten und ersteller-DACLs, wie durch die Vererbungsregeln definiert.
- Geerbte ACEs werden als INHERITED_ACE gekennzeichnet.
Für DACLs und SACLs werden bestimmte ACEs-Typen in ParentDescriptor und CreatorDescriptor bearbeitet und möglicherweise durch zwei ACEs in NewDescriptor ersetzt. Insbesondere kann ein vererbbarer ACE, der mindestens eines der folgenden zugeordneten Elemente enthält, zu zwei ACEs im Ausgabesicherheitsdeskriptor führen. Zu den zuordnungsfähigen Elementen gehören:
- Generische Zugriffsrechte im ACCESS_MASK
- Creator Owner SID oder Creator Group SID als ACE-Antragstellerbezeichner
- Ein ACE, bei dem es sich um eine Kopie des Originals handelt, aber das flag INHERIT_ONLY festgelegt ist. Dieser ACE wird jedoch nicht erstellt, wenn eine der folgenden beiden Bedingungen vorhanden ist:
- Der IsContainerObject-Parameter ist FALSE. Vererbbare ACEs sind für Nichtcontainerobjekte bedeutungslos.
- Der ursprüngliche ACE enthält das flag NO_PROPAGATE_INHERIT. Der ursprüngliche ACE soll als effektiver ACE für Kinder geerbt werden, aber nicht unter diesen Untergeordneten vererbbar.
- Eine effektive ACE, bei der das INHERITED_ACE Bits aktiviert ist und die generischen Elemente bestimmten Elementen zugeordnet werden, einschließlich:
- Generische Zugriffsrechte werden durch die entsprechenden Standard- und spezifischen Zugriffsrechte ersetzt, die in der Eingabe GenericMapping angegeben sind.
- Die Ersteller-Besitzer-SID wird im resultierenden NewDescriptor durch den Besitzer ersetzt.
- Die SID der Erstellergruppe wird im resultierenden NewDescriptor durch die Gruppe ersetzt.
Aufrufer, die keinen Zugriff auf das Token des Clients haben, der letztendlich den Besitzer festlegt, können die Überprüfung der Besitzer überspringen.
Um einen Sicherheitsdeskriptor für ein neues Objekt zu erstellen, rufen Sie CreatePrivateObjectSecurityEx auf, wobei ParentDescriptor auf den Sicherheitsdeskriptor des übergeordneten Containers und CreatorDescriptor auf den vom Ersteller des Objekts vorgeschlagenen Sicherheitsdeskriptor festgelegt ist.
Wenn der CreatorDescriptor-Sicherheitsdeskriptor eine SACL enthält, muss für Token die berechtigung SE_SECURITY_NAME aktiviert sein, oder der Aufrufer muss das flag SEF_AVOID_PRIVILEGE_CHECK in AutoInheritFlags angeben.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | securitybaseapi.h (Einschließen von Windows.h) |
Bibliothek | Advapi32.lib |
DLL | Advapi32.dll |
Weitere Informationen
Client-/Server-Access Control-Funktionen