Méthodes de propriété IADsAccessControlEntry

Les méthodes de propriété de l’interface IADsAccessControlEntry obtiennent ou définissent les propriétés décrites dans le tableau suivant. Pour plus d’informations, consultez Méthodes de propriété d’interface.

Propriétés

AccessMask

Contient un ensemble d’indicateurs qui spécifient des privilèges d’accès pour l’objet. Les valeurs valides pour les objets Active Directory sont définies dans l’énumération ADS_RIGHTS_ENUM .

Pour plus d’informations et pour obtenir la liste des valeurs possibles pour les objets de partage de fichiers ou de fichiers, consultez Sécurité des fichiers et droits d’accès.

Pour plus d’informations et une liste des valeurs possibles pour les objets du Registre, consultez Sécurité de la clé de registre et droits d’accès.

Type d’accès : Lecture/écriture

Type de données de script : LONG

// C++ method syntax
HRESULT get_AccessMask(
  [out] LONG* plnAccessMask
);
HRESULT put_AccessMask(
  [in] LONG lnAccessMask
);

AceFlags

Contient un ensemble d’indicateurs qui spécifie si d’autres conteneurs ou objets peuvent hériter de l’ACE. Les valeurs valides pour l’objet Active Directory sont définies dans l’énumération ADS_ACEFLAG_ENUM .

Pour plus d’informations et les valeurs possibles pour les objets de fichier, de partage de fichiers et de Registre, consultez le membre AceFlags de la structure ACE_HEADER .

Type d’accès : Lecture/écriture

Type de données de script : LONG

// C++ method syntax
HRESULT get_AceFlags(
  [out] LONG* plnAceFlags
);
HRESULT put_AceFlags(
  [in] LONG lnAceFlags
);

AceType

Contient une valeur qui indique le type d’ACE. Les valeurs valides pour les objets Active Directory sont définies dans l’énumération ADS_ACETYPE_ENUM .

Pour plus d’informations et les valeurs possibles pour les objets de fichier, de partage de fichiers et de Registre, consultez le membre AceType de la structure ACE_HEADER .

Type d’accès : Lecture/écriture

Type de données de script : LONG

// C++ method syntax
HRESULT get_AceType(
  [out] LONG* plAceType
);
HRESULT put_AceType(
  [in] LONG lnAceType
);

Indicateurs

Indicateur qui indique si l’ACE a un type d’objet ou un type d’objet hérité. Les indicateurs valides sont définis dans l’énumération ADS_FLAGTYPE_ENUM .

Type d’accès : Lecture/écriture

Type de données de script : LONG

// C++ method syntax
HRESULT get_Flags(
  [out] LONG* lnflags
);
HRESULT put_Flags(
  [in] LONG lnflags
);

InheritedObjectType

Indicateur qui indique le type d’un objet enfant d’un objet ADSI. Sa valeur est un GUID vers un objet au format chaîne. Lorsqu’un tel GUID est défini, l’ACE s’applique uniquement à l’objet auquel le GUID fait référence.

Type d’accès : Lecture/écriture

Type de données de script : BSTR

// C++ method syntax
HRESULT get_InheritedObjectType(
  [out] BSTR* bstrInheritedObjectType
);
HRESULT put_InheritedObjectType(
  [in] BSTR bstrInheritedObjectType
);

ObjectType

Indicateur qui indique le type d’objet ADSI. Sa valeur est un GUID d’une propriété ou d’un objet au format chaîne. Le GUID fait référence à une propriété lorsque des masques d’accès ADS_RIGHT_DS_READ_PROP et ADS_RIGHT_DS_WRITE_PROP sont utilisés. Le GUID spécifie un objet lorsque des masques d’accès ADS_RIGHT_DS_CREATE_CHILD et ADS_RIGHT_DS_DELETE_CHILD sont utilisés.

Type d’accès : Lecture/écriture

Type de données de script : BSTR

// C++ method syntax
HRESULT get_ObjectType(
  [out] BSTR* bstrObjectType
);
HRESULT put_ObjectType(
  [in] BSTR bstrObjectType
);

Tiers de confiance

Contient le nom du compte auquel l’ACE s’applique.

Type d’accès : Lecture/écriture

Type de données de script : BSTR

// C++ method syntax
HRESULT get_Trustee(
  [out] BSTR* pbstrSecurityId
);
HRESULT put_Trustee(
  [in] BSTR bstrSecurityId
);

Exemples

L’exemple de code suivant montre comment ajouter des entrées à une liste de contrôle d’accès discrétionnaire à l’aide des méthodes de propriété IADsAccessControlEntry .

Dim x As IADs
Dim sd As IADsSecurityDescriptor
Dim ace As IADsAccessControlEntry
Dim Dacl As IADsAccessControlList
Dim Ace1 As New AccessControlEntry
Dim Ace2 As New AccessControlEntry

On Error GoTo Cleanup
 
Set x = GetObject("LDAP://OU=Sales, DC=Fabrikam,DC=com")
Set sd = x.Get("ntSecurityDescriptor")
Set Dacl = sd.DiscretionaryAcl
 
' Show the existing ACEs.
For Each ace In Dacl
  Debug.Print ace.Trustee
Next
 
 
' Setup the first ACE.
Ace1.AccessMask = -1 'Full Permission (Allowed)
Ace1.AceType = ADS_ACETYPE_ACCESS_ALLOWED
Ace1.AceFlags = ADS_ACEFLAG_INHERIT_ACE
Ace1.Trustee = "ACTIVED\Administrator"
 
' Setup the 2nd ACE.
Ace2.AccessMask = -1 'Full Permission (Denied)
Ace2.AceType = ADS_ACETYPE_ACCESS_DENIED
Ace2.AceFlags = ADS_ACEFLAG_INHERIT_ACE
Ace2.Trustee = "ACTIVED\Andyhar"
 
' Add the ACEs to the Discretionary ACL.
Dacl.AddAce Ace1
Dacl.AddAce Ace2
 
sd.DiscretionaryAcl = Dacl
x.Put "ntSecurityDescriptor", Array(sd)
x.SetInfo

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If

    Set x = Nothing
    Set sd = Nothing
    Set ace = Nothing
    Set Dacl = Nothing
    Set Ace1 = Nothing
    Set Ace2 = Nothing
    Set obj = Nothing
    Set cls = Nothing

L’exemple de code suivant affiche les entrées de contrôle d’accès.

IADs *pADs = NULL;
IDispatch *pDisp = NULL;
IADsSecurityDescriptor *pSD = NULL;
VARIANT var;
HRESULT hr = S_OK;
 
VariantInit(&var);

hr = ADsOpenObject(L"LDAP://OU=Sales, DC=Fabrikam,DC=com",NULL,NULL,
                   ADS_SECURE_AUTHENTICATION, IID_IADs,(void**)&pADs);
if(FAILED(hr)) {goto Cleanup;}

hr = pADs->Get(CComBSTR("ntSecurityDescriptor"),&var);
if(FAILED(hr)) {goto Cleanup;}

pDisp = V_DISPATCH(&var);

hr = pDisp->QueryInterface(IID_IADsSecurityDescriptor,(void**)&pSD);
if(FAILED(hr)) {goto Cleanup;}
pDisp->Release();


pSD->get_DiscretionaryAcl(&pDisp);

hr = pDisp->QueryInterface(IID_IADsAccessControlList,(void**)&pACL);
if(FAILED(hr)) {goto Cleanup;}

hr = DisplayAccessInfo(pSD);
if(FAILED(hr)) {goto Cleanup;}
VariantClear(&var);

Cleanup:
    if(pADs) pADs->Release();
    if(pDisp) pDisp->Release();
    if(pSD) pSD->Release();
    return hr;



HRESULT DisplayAccessInfo(IADsSecurityDescriptor *pSD)
{
    LPWSTR lpszFunction = L"DisplayAccessInfo";
    IDispatch *pDisp = NULL;
    IADsAccessControlList *pACL = NULL;
    IADsAccessControlEntry *pACE = NULL;
    IEnumVARIANT *pEnum = NULL;
    IUnknown *pUnk = NULL;
    HRESULT hr = S_OK;
    ULONG nFetch = 0;
    BSTR bstrValue = NULL;
    VARIANT var;
    LPWSTR lpszOutput = NULL;
    LPWSTR lpszMask = NULL;
    size_t nLength = 0;
    
    VariantInit(&var);
    
    hr = pSD->get_DiscretionaryAcl(&pDisp);
    if(FAILED(hr)){goto Cleanup;}
    hr = pDisp->QueryInterface(IID_IADsAccessControlList,(void**)&pACL);
    if(FAILED(hr)){goto Cleanup;}
    
    hr = pACL->get__NewEnum(&pUnk);
    if(FAILED(hr)){goto Cleanup;}
    
    hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
    
    if(FAILED(hr)){goto Cleanup;}
    hr = pEnum->Next(1,&var,&nFetch);
    
    while(hr == S_OK)
    {
        if(nFetch==1)
        {
            if(VT_DISPATCH != V_VT(&var))
            {
                goto Cleanup;
            }
            
            pDisp = V_DISPATCH(&var);
            hr = pDisp->QueryInterface(IID_IADsAccessControlEntry,(void**)&pACE);
            
            if(SUCCEEDED(hr))
            {
                lpszMask = L"Trustee: %s";
                hr = pACE->get_Trustee(&bstrValue);
                nLength = wcslen(lpszMask) + wcslen(bstrValue) + 1;
                lpszOutput = new WCHAR[nLength];
                swprintf_s(lpszOutput,lpszMask,bstrValue);
                printf(lpszOutput);
                delete [] lpszOutput;
                SysFreeString(bstrValue);
                
                pACE->Release();
                pACE = NULL;
                pDisp->Release();
                pDisp = NULL;
            }       
            
            VariantClear(&var);
        }       
        hr = pEnum->Next(1,&var,&nFetch);
    }
    
Cleanup:
    if(pDisp) pDisp->Release();
    if(pACL) pACL->Release();
    if(pACE) pACE->Release();
    if(pEnum) pEnum->Release();
    if(pUnk) pUnk->Release();
    if(szValue) SysFreeString(szValue);
    return hr;
}

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows Vista
Serveur minimal pris en charge
Windows Server 2008
En-tête
Iads.h
DLL
Activeds.dll
IID
IID_IADsAccessControlEntry est défini comme B4F3A14C-9BDD-11D0-852C-00C04FD8D503

Voir aussi

IADsAccessControlEntry

IADsAccessControlList

IADsSecurityDescriptor