SetSecurityDescriptorDacl, fonction (securitybaseapi.h)
La fonction SetSecurityDescriptorDacl définit des informations dans une liste de contrôle d’accès discrétionnaire (DACL). Si un DACL est déjà présent dans le descripteur de sécurité, le DACL est remplacé.
Syntaxe
BOOL SetSecurityDescriptorDacl(
[in, out] PSECURITY_DESCRIPTOR pSecurityDescriptor,
[in] BOOL bDaclPresent,
[in, optional] PACL pDacl,
[in] BOOL bDaclDefaulted
);
Paramètres
[in, out] pSecurityDescriptor
Pointeur vers la structure SECURITY_DESCRIPTOR à laquelle la fonction ajoute la liste DACL. Ce descripteur de sécurité doit être au format absolu , ce qui signifie que ses membres doivent être des pointeurs vers d’autres structures, plutôt que des décalages vers des données contiguës.
[in] bDaclPresent
Indicateur qui indique la présence d’un DACL dans le descripteur de sécurité. Si ce paramètre a la valeur TRUE, la fonction définit l’indicateur SE_DACL_PRESENT dans la structure SECURITY_DESCRIPTOR_CONTROL et utilise les valeurs des paramètres pDacl et bDaclDefaulted . Si ce paramètre a la valeur FALSE, la fonction efface l’indicateur SE_DACL_PRESENT, et pDacl et bDaclDefaulted sont ignorés.
[in, optional] pDacl
Pointeur vers une structure de liste de contrôle d’accès qui spécifie le DACL pour le descripteur de sécurité. Si ce paramètre a la valeur NULL, un DACL NULL est affecté au descripteur de sécurité, ce qui autorise tout accès à l’objet. La liste DACL est référencée par le descripteur de sécurité, et non copié dans.
[in] bDaclDefaulted
Indicateur qui indique la source du DACL. Si cet indicateur a la valeur TRUE, le DACL a été récupéré par un mécanisme par défaut. Si la valeur est FALSE, le DACL a été explicitement spécifié par un utilisateur. La fonction stocke cette valeur dans l’indicateur SE_DACL_DEFAULTED de la structure SECURITY_DESCRIPTOR_CONTROL . Si ce paramètre n’est pas spécifié, l’indicateur SE_DACL_DEFAULTED est effacé.
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.
Remarques
Il existe une différence importante entre un DACL vide et un DACL inexistant. Lorsqu’une liste de contrôle d’accès est vide, elle ne contient aucune entrée de contrôle d’accès (ACA) ; par conséquent, aucun droit d’accès n’est explicitement accordé. Par conséquent, l’accès à l’objet est implicitement refusé.
Lorsqu’un objet n’a pas de DACL (lorsque le paramètre pDacl a la valeur NULL), aucune protection n’est affectée à l’objet et toutes les demandes d’accès sont accordées. Pour garantir la sécurité, limitez l’accès à l’aide d’une liste de contrôle d’accès.
Il existe trois résultats possibles dans différentes configurations de l’indicateur bDaclPresent et du paramètre pDacl :
- Lorsque le paramètre pDacl pointe vers un DACL et que l’indicateur bDaclPresent a la valeur TRUE, un DACL est spécifié et doit contenir des AEC autorisés à accéder à l’objet.
- Lorsque le paramètre pDacl ne pointe pas vers un DACL et que l’indicateur bDaclPresent a la valeur TRUE, un DACL NULL est spécifié. Tout accès est autorisé. Vous ne devez pas utiliser un DACL NULL avec un objet, car tout utilisateur peut modifier le DACL et le propriétaire du descripteur de sécurité. Cela interférera avec l’utilisation de l’objet .
- Lorsque le paramètre pDacl ne pointe pas vers un DACL et que l’indicateur bDaclPresent a la valeur FALSE, un DACL peut être fourni pour l’objet par le biais d’un mécanisme d’héritage ou par défaut.
Exemples
Pour obtenir un exemple qui utilise cette fonction, consultez Création d’un descripteur de sécurité pour un nouvel objet.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | securitybaseapi.h (inclure Windows.h) |
Bibliothèque | Advapi32.lib |
DLL | Advapi32.dll |