Partager via


énumération ADS_SECURITY_INFO_ENUM (iads.h)

L’énumération ADS_SECURITY_INFO_ENUM spécifie les options disponibles pour examiner les données de sécurité d’un objet.

Syntax

typedef enum __MIDL___MIDL_itf_ads_0001_0077_0002 {
  ADS_SECURITY_INFO_OWNER = 0x1,
  ADS_SECURITY_INFO_GROUP = 0x2,
  ADS_SECURITY_INFO_DACL = 0x4,
  ADS_SECURITY_INFO_SACL = 0x8
} ADS_SECURITY_INFO_ENUM;

Constantes

 
ADS_SECURITY_INFO_OWNER
Valeur : 0x1
Lit ou définit les données du propriétaire.
ADS_SECURITY_INFO_GROUP
Valeur : 0x2
Lit ou définit les données de groupe.
ADS_SECURITY_INFO_DACL
Valeur : 0x4
Lit ou définit les données de liste de contrôle d’accès discrétionnaires.
ADS_SECURITY_INFO_SACL
Valeur : 0x8
Lit ou définit les données de liste de contrôle d’accès système.

Remarques

Les options définies dans cette énumération sont des masques de bits. Plusieurs options peuvent être définies à l’aide d’opérations appropriées au niveau du bit.

Pour lire les données de sécurité d’un objet, utilisez l’interface IADsObjectOptions , en fournissant les options de données de sécurité répertoriées dans cette énumération.

La liste suivante répertorie les combinaisons d’indicateurs courantes et leur utilisation.

Combinaison d’indicateurs Description
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP et ADS_SECURITY_INFO_DACL Permettre aux utilisateurs de lire les données de sécurité du propriétaire, du groupe ou du dacl d’un objet. Il s’agit du paramètre par défaut lors de la création d’un objet.
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP, ADS_SECURITY_INFO_DACL et ADS_SECURITY_INFO_SACL Permettre aux utilisateurs de lire la liste SACL. L’indicateur ADS_SECURITY_INFO_SACL ne peut pas être utilisé seul.
 

Actuellement, ces options sont disponibles uniquement pour Active Directory.

Étant donné que Visual Basic Scripting Edition (VBScript) ne peut pas lire les données d’une bibliothèque de types, une application doit utiliser les constantes numériques appropriées, au lieu des constantes symboliques, pour définir les indicateurs appropriés. Pour utiliser les constantes symboliques comme bonne pratique de programmation, écrivez des déclarations explicites de ces constantes, comme cela est fait ici.

Exemples

L’exemple de code suivant affiche le nombre d’entrées de contrôle d’accès dans une liste SACL.

Const ADS_SECURITY_INFO_OWNER = &H1
Const ADS_SECURITY_INFO_GROUP = &H2
Const ADS_SECURITY_INFO_DACL = &H4
Const ADS_SECURITY_INFO_SACL = &H8

Const ADS_OPTION_SECURITY_MASK = 3

Dim x As IADs
Dim dso As IADsOpenDSObject
Dim adsPath As String
Dim sd As IADsSecurityDescriptor
Dim sacl As IADsAccessControlList
Dim objOps As IADsObjectOptions
Dim opt As Variant
Dim canReadSacl As Variant
 
Set dso = GetObject("LDAP:")
adsPath = "LDAP://ArcSrv1/dc=Sales,dc=Fabrikam,dc=com"
Set x = dso.OpenDSObject(adsPath, vbNullString, vbNullString, 1)
Set objOps = x
 
canReadSacl = ADS_SECURITY_INFO_OWNER _
                Or ADS_SECURITY_INFO_GROUP _
                Or ADS_SECURITY_INFO_DACL _
                Or ADS_SECURITY_INFO_SACL
 
opt = objOps.GetOption(ADS_OPTION_SECURITY_MASK)
If opt <> canReadSacl Then
    objOps.SetOption ADS_OPTION_SECURITY_MASK, canReadSacl
End If
Set sd = x.Get("ntSecurityDescriptor")
Set sacl = sd.SystemAcl
Debug.Print "sacl(aceCount)= " & sacl.AceCount

L’exemple de code suivant affiche le nombre d’entrées de contrôle d’accès dans une liste de contrôle d’accès système. Par souci de concision, la vérification des erreurs est omise.

void TestObjectOptions()
{
    long lCanReadSACL = ADS_SECURITY_INFO_OWNER | 
        ADS_SECURITY_INFO_GROUP | 
        ADS_SECURITY_INFO_DACL | 
        ADS_SECURITY_INFO_SACL;

    HRESULT hr = S_OK;
    CComPtr<IADs> spObj;
    hr = ADsOpenObject(L"LDAP://arcSrv1/dc=Sales,dc=Fabrikam,dc=com", 
        NULL, 
        NULL,
        ADS_SECURE_AUTHENTICATION,
        IID_IADs,
        (void**)&spObj);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsObjectOptions> spObjOps;
    hr = spObj->QueryInterface(IID_IADsObjectOptions, (void**)&spObjOps);
    if(S_OK != hr)
    {
        return;
    }

    CComVariant svar;
    hr = spObjOps->GetOption(ADS_OPTION_SECURITY_MASK, &svar);
    if(S_OK != hr)
    {
        return;
    }

    if(V_I4(&svar) != lCanReadSACL)
    {
        svar = lCanReadSACL;
        hr = spObjOps->SetOption(ADS_OPTION_SECURITY_MASK, svar);
    }

    hr = spObj->Get(CComBSTR("ntSecurityDescriptor"), &svar);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsSecurityDescriptor> spSd;
    hr = V_DISPATCH(&svar)->QueryInterface(IID_IADsSecurityDescriptor, 
                                            (void**)&spSd);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IDispatch> spDisp;
    hr = spSd->get_SystemAcl(&spDisp);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsAccessControlList> spSacl;
    hr = spDisp->QueryInterface(IID_IADsAccessControlList, 
                                (void**)&spSacl);
    if(S_OK != hr)
    {
        return;
    }

    LONG lOptions;
    hr = spSacl->get_AceCount(&lOptions);
    if(S_OK != hr)
    {
        return;
    }

    _tprintf(TEXT("Number of ACE's in the SACL is %d\n"), lOptions);
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
Serveur minimal pris en charge Windows Server 2008
En-tête iads.h

Voir aussi

Énumérations ADSI

IADsObjectOptions

IADsObjectOptions ::GetOption

IADsObjectOptions ::SetOption