Partager via


Lecture d’un jeu de droits d’accès de contrôle dans la liste de contrôle d’accès d’un objet

À l’aide d’ADSI, vous lisez un ACE de droit d’accès au contrôle comme vous le feriez pour n’importe quel autre ACE dans une liste de contrôle d’accès. N’oubliez pas que vous pouvez également utiliser les API de sécurité Win32 pour lire les listes de contrôle d’accès sur les objets d’annuaire. Toutefois, les droits d’accès de contrôle utilisent les propriétés de l’interface IADsAccessControlEntry d’une manière spécifique à l’octroi et au refus des droits d’accès de contrôle :

  • AccessMask doit contenir ADS_RIGHT_DS_CONTROL_ACCESS.
  • La valeur des indicateurs est ADS_FLAG_OBJECT_TYPE_PRESENT.
  • ObjectType est la forme de chaîne de l’attribut rightsGUID du droit d’accès de contrôle. Le format de chaîne du GUID est le même format de chaîne que la fonction bibliothèque COM StringFromGUID2 .
  • AceType est soit ADS_ACETYPE_ACCESS_ALLOWED_OBJECT accorder au fiduciaire le droit d’accès de contrôle, soit ADS_ACETYPE_ACCESS_DENIED_OBJECT de refuser au fiduciaire le droit d’accès de contrôle.
  • Le fiduciaire est le principal de la sécurité; c’est-à-dire l’utilisateur, le groupe, l’ordinateur, etc., auquel l’ACE s’applique.

Utilisez la procédure suivante pour lire un ACE pour un objet ADSI. La procédure suivante s’applique aux applications C et C++.

Pour lire un ACE pour un objet ADSI

  1. Obtenir un pointeur d’interface IADs vers l’objet.
  2. Utilisez la méthode IADs::Get pour obtenir le descripteur de sécurité de l’objet. Le nom de la propriété qui contient le descripteur de sécurité est « nTSecurityDescriptor ». La propriété est retournée en tant que VARIANT qui contient un pointeur IDispatch . N’oubliez pas que le membre vt est VT_DISPATCH. Appelez QueryInterface sur ce pointeur IDispatch pour obtenir une interface IADsSecurityDescriptor afin d’utiliser les méthodes de cette interface pour accéder à la liste de contrôle d’accès du descripteur de sécurité.
  3. Utilisez la méthode IADsSecurityDescriptor::get_DiscretionaryAcl pour obtenir l’ACL. La méthode retourne un pointeur IDispatch . Appelez QueryInterface sur ce pointeur IDispatch pour obtenir une interface IADsAccessControlList afin d’utiliser les méthodes de cette interface pour accéder aux aces individuels dans l’ACL.
  4. Utilisez la méthode IADsAccessControlList::get__NewEnum pour énumérer les AAC. La méthode retourne un pointeur IUnknown . Appelez QueryInterface sur ce pointeur IUnknown pour obtenir une interface IEnumVARIANT .
  5. Utilisez la méthode IEnumVARIANT::Next pour énumérer les AES dans la liste de contrôle d’accès. La propriété est retournée en tant que VARIANT qui contient un pointeur IDispatch . N’oubliez pas que le membre vt est VT_DISPATCH. Appelez QueryInterface sur ce pointeur IDispatch pour obtenir une interface IADsAccessControlEntry pour lire l’ACE.
  6. Appelez la méthode IADsAccessControlEntry::get_AccessMask pour obtenir AccessMask et vérifier que la valeur AccessMask pour l’indicateur ADS_RIGHT_DS_CONTROL_ACCESS . S’il a cet indicateur, l’ACE contient un droit d’accès de contrôle.
  7. Appelez la méthode IADsAccessControlEntry::get_Flags pour obtenir l’indicateur du type d’objet.
  8. Vérifiez la valeur Des indicateurs pour ADS_FLAG_OBJECT_TYPE_PRESENT indicateur. Si Flags a la valeur ADS_FLAG_OBJECT_TYPE_PRESENT, appelez la méthode IADsAccessControlEntry::get_ObjectType pour obtenir une chaîne qui contient les droitsGUID du droit d’accès de contrôle auquel l’ACE s’applique.
  9. Appelez la méthode IADsAccessControlEntry::get_AceType pour obtenir le type ACE. Le type sera un ADS_ACETYPE_ACCESS_ALLOWED_OBJECT d’accorder au fiduciaire le droit d’accès de contrôle ou ADS_ACETYPE_ACCESS_DENIED_OBJECT de refuser le droit d’accès de contrôle.
  10. Appelez la méthode IADsAccessControlEntry::get_Trustee pour obtenir le principal de sécurité ; c’est-à-dire l’utilisateur, le groupe, l’ordinateur, etc. auquel l’ACE s’applique.
  11. Lorsque vous avez terminé avec les chaînes ObjectType et Trustee , utilisez SysFreeString pour libérer la mémoire pour ces chaînes.
  12. Une fois les interfaces terminées, appelez Release pour décrémenter ou libérer toutes les références d’interface.