Création ou modification d’une liste de contrôle d’accès
Windows prend en charge un ensemble de fonctions qui créent une liste de contrôle d’accès (ACL) ou modifient les entrées de contrôle d’accès dans une liste de contrôle d’accès existante.
La fonction SetEntriesInAcl crée une liste de contrôle d’accès. SetEntriesInAcl peut spécifier un ensemble entièrement nouveau d’ACL pour la liste de contrôle d’accès, ou fusionner un ou plusieurs nouveaux ACÉ avec les ACÉ d’une liste de contrôle d’accès existante. La fonction SetEntriesInAcl utilise un tableau de structures EXPLICIT_ACCESS pour spécifier les informations relatives aux nouveaux AAC. Chaque structure EXPLICIT_ACCESS contient des informations qui décrivent un seul ACE. Ces informations incluent les droits d’accès, le type d’ACE, les indicateurs qui contrôlent l’héritage ACE et une structure trustee qui identifie le fiduciaire.
Pour ajouter un nouvel ACE à une liste de contrôle d’accès existante
- Utilisez la fonction GetSecurityInfo ou GetNamedSecurityInfo pour obtenir la liste DACL ou LA SACL existante à partir du descripteur de sécurité d’un objet.
- Pour chaque nouvelle ACE, appelez la fonction BuildExplicitAccessWithName pour remplir une structure de EXPLICIT_ACCESS avec les informations qui décrivent l’ACE.
- Appelez SetEntriesInAcl, en spécifiant la liste de contrôle d’accès existante et un tableau de structures EXPLICIT_ACCESS pour les nouvelles ACL. La fonction SetEntriesInAcl alloue et initialise la liste de contrôle d’accès et ses AE.
- Appelez la fonction SetSecurityInfo ou SetNamedSecurityInfo pour attacher la nouvelle liste de contrôle d’accès au descripteur de sécurité de l’objet.
Si l’appelant spécifie une liste de contrôle d’accès existante, SetEntriesInAcl fusionne les nouvelles informations ACE avec les ACL existantes dans la liste de contrôle d’accès. Prenons le cas, par exemple, où la liste de contrôle d’accès existante accorde l’accès à un fiduciaire spécifié et où une structure de EXPLICIT_ACCESS refuse l’accès au même fiduciaire. Dans ce cas, SetEntriesInAcl ajoute une nouvelle ACE d’accès refusé pour le fiduciaire et supprime ou modifie l’ACE autorisé à accéder existant pour le fiduciaire.
Pour obtenir un exemple de code qui fusionne une nouvelle ACE dans une liste de contrôle d’accès existante, consultez Modification des listes de contrôle d’accès d’un objet en C++.