CreatePrivateObjectSecurityEx, fonction (securitybaseapi.h)
La fonction CreatePrivateObjectSecurityEx alloue et initialise un descripteur de sécurité auto-relatif pour un nouvel objet privé créé par le gestionnaire de ressources appelant cette fonction.
Syntaxe
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
);
Paramètres
[in, optional] ParentDescriptor
Pointeur vers le descripteur de sécurité du conteneur parent de l’objet. S’il n’existe aucun conteneur parent, ce paramètre a la valeur NULL.
[in, optional] CreatorDescriptor
Pointeur vers un descripteur de sécurité fourni par le créateur de l’objet. Si le créateur de l’objet ne transmet pas explicitement les informations de sécurité pour le nouvel objet, ce paramètre peut être NULL. Ce paramètre peut également pointer vers un descripteur de sécurité par défaut.
[out] NewDescriptor
Pointeur vers une variable qui reçoit un pointeur vers le descripteur de sécurité auto-relatif nouvellement alloué. Une fois que vous avez terminé d’utiliser le descripteur de sécurité, libérez-le en appelant le
Fonction DestroyPrivateObjectSecurity .
[in, optional] ObjectType
Pointeur vers une structure GUID qui identifie le type d’objet associé à NewDescriptor. Si l’objet n’a pas de GUID, définissez ObjectType sur NULL.
[in] IsContainerObject
Spécifie si le nouvel objet peut contenir d’autres objets. La valeur TRUE indique que le nouvel objet est un conteneur. La valeur FALSE indique que le nouvel objet n’est pas un conteneur.
[in] AutoInheritFlags
Ensemble d’indicateurs de bits qui contrôlent la façon dont les entrées de contrôle d’accès (ACÉ) sont héritées de ParentDescriptor. Ce paramètre peut être une combinaison des valeurs suivantes.
Valeur | Signification |
---|---|
|
La fonction n’case activée pas la validité du propriétaire dans le NewDescriptor résultant, comme décrit dans Remarques ci-dessous. Si l’indicateur SEF_AVOID_PRIVILEGE_CHECK est également défini, le paramètre Token peut avoir la valeur NULL. |
|
Toutes les restrictions spécifiées par parentDescriptor qui limiteraient la capacité de l’appelant à spécifier une liste de contrôle d’accès (DACL) dans le CreatorDescriptor sont ignorées. |
|
La fonction n’effectue pas de vérification des privilèges. Si l’indicateur SEF_AVOID_OWNER_CHECK est également défini, le paramètre Token peut avoir la valeur NULL. Cet indicateur est utile lors de l’implémentation de l’héritage automatique pour éviter de vérifier les privilèges sur chaque enfant mis à jour. |
|
La nouvelle liste de contrôle d’accès discrétionnaire (DACL) contient des ACÉ hérités de la liste DACL de ParentDescriptor, ainsi que tous les AIC explicites spécifiés dans la liste DACL de CreatorDescriptor. Si cet indicateur n’est pas défini, la nouvelle liste de contrôle d’accès n’hérite pas d’ACA. |
|
CreatorDescriptor est le descripteur par défaut pour le type d’objet spécifié par ObjectType. Par conséquent, CreatorDescriptor est ignoré si ParentDescriptor a des ACÉ spécifiques à un objet pour le type d’objet spécifié par le paramètre ObjectType . Si aucun de ces AE n’est hérité, CreatorDescriptor est géré comme si cet indicateur n’était pas spécifié. |
|
Le groupe de NewDescriptor est défini par défaut sur le groupe de ParentDescriptor. S’il n’est pas défini, le groupe de NewDescriptor est défini par défaut sur le groupe du jeton spécifié par le paramètre Token . Le groupe du jeton est spécifié dans le jeton lui-même. Dans les deux cas, si le paramètre CreatorDescriptor n’est pas NULL, le groupe NewDescriptor est défini sur le groupe à partir de CreatorDescriptor. |
|
Par défaut, le propriétaire de NewDescriptor est le propriétaire de ParentDescriptor. S’il n’est pas défini, le propriétaire de NewDescriptor est par défaut le propriétaire du jeton spécifié par le paramètre Token . Le propriétaire du jeton est spécifié dans le jeton lui-même. Dans les deux cas, si le paramètre CreatorDescriptor n’a pas la valeur NULL, le propriétaire NewDescriptor est défini sur le propriétaire à partir de CreatorDescriptor. |
|
Lorsque cet indicateur est défini, l’étiquette ACE obligatoire dans CreatorDescriptor n’est pas utilisée pour créer une étiquette ACE obligatoire dans NewDescriptor. Au lieu de cela, une nouvelle SYSTEM_MANDATORY_LABEL_ACE avec un masque d’accès de SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP et le SID du SID d’intégrité du jeton est ajouté à NewDescriptor. |
|
Lorsque cet indicateur est défini, l’étiquette ACE obligatoire dans CreatorDescriptor n’est pas utilisée pour créer une étiquette ACE obligatoire dans NewDescriptor. Au lieu de cela, une nouvelle SYSTEM_MANDATORY_LABEL_ACE avec un masque d’accès de SYSTEM_MANDATORY_LABEL_NO_READ_UP et le SID du SID d’intégrité du jeton est ajouté à NewDescriptor. |
|
Lorsque cet indicateur est défini, l’étiquette ACE obligatoire dans CreatorDescriptor n’est pas utilisée pour créer une étiquette ACE obligatoire dans NewDescriptor. Au lieu de cela, une nouvelle SYSTEM_MANDATORY_LABEL_ACE avec un masque d’accès de SYSTEM_MANDATORY_LABEL_NO_WRITE_UP et le SID du SID d’intégrité du jeton est ajouté à NewDescriptor. |
|
La nouvelle liste de contrôle d’accès système (SACL) contient des AÉC héritées de la SACL de ParentDescriptor, ainsi que tous les AIC explicites spécifiés dans la SACL de CreatorDescriptor. Si cet indicateur n’est pas défini, la nouvelle liste SACL n’hérite pas des ACA. |
[in, optional] Token
Handle du jeton d’accès pour le processus client au nom duquel l’objet est en cours de création. S’il s’agit d’un jeton d’emprunt d’identité, il doit être au niveau SecurityIdentification ou supérieur. Pour obtenir une description complète du niveau d’emprunt d’identité SecurityIdentification, consultez le SECURITY_IMPERSONATION_LEVEL type énuméré.
Le jeton client contient des informations de sécurité par défaut, telles que le propriétaire par défaut, le groupe principal et LACL. La fonction utilise ces valeurs par défaut si les informations ne se situent pas dans les descripteurs de sécurité d’entrée. Le jeton doit être ouvert pour TOKEN_QUERY accès.
Si toutes les conditions suivantes sont remplies, le handle doit être ouvert pour TOKEN_DUPLICATE accès en plus de TOKEN_QUERY accès.
- Le handle de jeton fait référence à un jeton principal.
- Le descripteur de sécurité du jeton contient un ou plusieurs AE avec le SID OwnerRights .
- Un descripteur de sécurité est spécifié pour le paramètre CreatorDescriptor .
- L’appelant de cette fonction ne définit pas l’indicateur SEF_AVOID_OWNER_RESTRICTION dans le paramètre AutoInheritFlags .
[in] GenericMapping
Pointeur vers une structure de GENERIC_MAPPING qui spécifie le mappage de chaque droit générique vers des droits spécifiques pour l’objet.
Valeur retournée
Si la fonction réussit, la fonction retourne une valeur différente de zéro.
Si la fonction échoue, elle retourne zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError. Certains des codes d’erreur étendus et leurs significations sont répertoriés dans le tableau suivant.
Code de retour | Description |
---|---|
|
La fonction ne peut pas récupérer un propriétaire pour le nouveau descripteur de sécurité ou le SID ne peut pas être affecté en tant que propriétaire. Cela se produit lors de la validation du SID du propriétaire par rapport au jeton transmis. |
|
La fonction ne peut pas récupérer un groupe principal pour le nouveau descripteur de sécurité. |
|
La fonction a reçu null au lieu d’un jeton pour la validation du propriétaire ou la vérification des privilèges. |
|
Une liste de contrôle d’accès partagé est en cours de définition, SEF_AVOID_PRIVILEGE_CHECK n’a pas été transmise et le jeton transmis n’a pas SE_SECURITY_NAME activé. |
Remarques
La fonction CreatePrivateObjectSecurity est identique à l’appel de la fonction CreatePrivateObjectSecurityEx avec ObjectType défini sur NULL et AutoInheritFlags défini sur zéro.
Le paramètre AutoInheritFlags est distinct des bits de même nom dans le membre Control de la structure SECURITY_DESCRIPTOR . Pour obtenir une explication des bits de contrôle, consultez SECURITY_DESCRIPTOR_CONTROL.
Si AutoInheritFlags spécifie le SEF_DACL_AUTO_INHERIT bit, la fonction applique les règles suivantes à la liste de contrôle d’accès d’accès (DACL) dans le nouveau descripteur de sécurité :
- L’indicateur SE_DACL_AUTO_INHERITED est défini dans le membre Contrôle du nouveau descripteur de sécurité.
- La liste de contrôle d’accès du nouveau descripteur de sécurité hérite des AE du parentDescriptor , que CreatorDescriptor soit le descripteur de sécurité par défaut ou ait été explicitement spécifié par le créateur. La nouvelle liste de contrôle d’accès (DACL) est une combinaison des dll DACL parent et créateur telles que définies par les règles d’héritage.
- Les AE hérités sont marqués comme INHERITED_ACE.
Pour les DACL et les SACL, certains types d’ACÉ dans ParentDescriptor et CreatorDescriptor seront manipulés et éventuellement remplacés par deux ACÉ dans NewDescriptor. Plus précisément, un ACE pouvant être hérité qui contient au moins un des éléments mappables suivants peut entraîner deux AE dans le descripteur de sécurité de sortie. Les éléments Mappable sont les suivants :
- Droits d’accès génériques dans le ACCESS_MASK
- SID propriétaire du créateur ou SID du groupe de créateurs en tant qu’identificateur d’objet ACE
- Ace qui est une copie de l’original, mais avec l’indicateur INHERIT_ONLY défini. Toutefois, cette ACE ne sera pas créée si l’une des deux conditions suivantes existe :
- Le paramètre IsContainerObject est FALSE. Les ACO hérités sont vides de sens sur les objets non-contenus.
- L’ACE d’origine contient l’indicateur NO_PROPAGATE_INHERIT. L’ACE d’origine est destiné à être hérité en tant qu’ACE efficace sur les enfants, mais il n’est pas héritable en dessous de ces enfants.
- Ace efficace dans lequel le bit INHERITED_ACE est activé et les éléments génériques sont mappés à des éléments spécifiques, notamment :
- Les droits d’accès génériques sont remplacés par les droits d’accès standard et spécifiques correspondants indiqués dans l’entrée GenericMapping.
- Le SID du propriétaire du créateur est remplacé par le propriétaire dans le NewDescriptor résultant
- Le SID du groupe créateur est remplacé par le groupe dans le NewDescriptor résultant
Les appelants qui n’ont pas accès au jeton du client qui définira finalement le propriétaire peuvent choisir d’ignorer la vérification de validation du propriétaire.
Pour créer un descripteur de sécurité pour un nouvel objet, appelez CreatePrivateObjectSecurityEx avec ParentDescriptor défini sur le descripteur de sécurité du conteneur parent et CreatorDescriptor défini sur le descripteur de sécurité proposé par le créateur de l’objet.
Si le descripteur de sécurité CreatorDescriptor contient une liste SACL, le jeton doit avoir le privilège SE_SECURITY_NAME activé ou l’appelant doit spécifier l’indicateur SEF_AVOID_PRIVILEGE_CHECK dans AutoInheritFlags.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | securitybaseapi.h (inclure Windows.h) |
Bibliothèque | Advapi32.lib |
DLL | Advapi32.dll |
Voir aussi
Fonctions client/serveur Access Control