Interfaccia IADsAccessControlList (iads.h)

L'interfaccia IADsAccessControlList è un'interfaccia doppia che gestisce le singole voci di controllo di accesso (ACEs).

Ereditarietà

L'interfaccia IADsAccessControlList eredita dall'interfaccia IDispatch . IADsAccessControlList include anche questi tipi di membri:

Metodi

L'interfaccia IADsAccessControlList include questi metodi.

 
IADsAccessControlList::AddAce

Il metodo IADsAccessControlList::AddAce aggiunge un oggetto IADsAccessControlEntry all'oggetto IADsAccessControlList.
IADsAccessControlList::CopyAccessList

Il metodo IADsAccessControlList::CopyAccessList copia ogni voce di controllo di accesso (ACE) nell'elenco di controllo di accesso (ACL) allo spazio di elaborazione del chiamante.
IADsAccessControlList::get__NewEnum

Il metodo IADsAccessControlList::get__NewEnum viene usato per ottenere un oggetto enumeratore per l'ECL per enumerare gli ACL.
IADsAccessControlList::RemoveAce

Rimuove una voce di controllo di accesso (ACE) dall'elenco di controllo di accesso (ACL).

Commenti

Un elenco di controllo di accesso (ACL) è una raccolta di ACL che possono fornire un controllo di accesso più specifico allo stesso oggetto ADSI per client diversi. In generale, diversi provider implementano controlli di accesso diversi e pertanto il comportamento dell'oggetto è specifico per il provider. Per altre informazioni, vedere la documentazione del provider. Per altre informazioni sui provider Microsoft, vedere Provider di sistema ADSI. Attualmente, solo il provider LDAP supporta i controlli di accesso.

Prima di poter usare un oggetto ACE, ottenere prima di tutto l'ACL a cui appartengono. Gli ACL sono gestiti dai descrittori di sicurezza e possono essere di ACL discrezionale e ACL di sistema. Per altre informazioni, vedere IADsSecurityDescriptor.

Usando le proprietà e i metodi dell'interfaccia IADsAccessControlList , è possibile recuperare ed enumerare gli ACL, aggiungere nuove voci all'elenco o rimuovere voci esistenti.

Per gestire i controlli di accesso su un ADSI

  1. Prima di tutto, recuperare il descrittore di sicurezza dell'oggetto che implementa l'interfaccia IADsSecurityDescriptor .
  2. In secondo luogo, recuperare l'ACL dal descrittore di sicurezza.
  3. In terzo luogo, usare ace o AES dell'oggetto nell'elenco di controllo di accesso.

Per rendere persistenti tutti gli ACL nuovi o modificati

  1. Aggiungere prima di tutto l'ACE all'ACL.
  2. In secondo luogo, assegnare l'ACL al descrittore di sicurezza.
  3. In terzo luogo, eseguire il commit del descrittore di sicurezza nell'archivio directory.
Per altre informazioni su DACLs, vedere DACLs Null e FILE DACLs vuoti.

Esempio

Nell'esempio di codice seguente viene illustrato come usare le voci di controllo di accesso di un elenco di controllo di accesso discrezionale.

Dim X As IADs
Dim Namespace As IADsOpenDSObject
Dim SecurityDescriptor As IADsSecurityDescriptor
Dim Dacl As IADsAccessControlList

On Error GoTo Cleanup
 
Set Namespace = GetObject("LDAP://")
Set X= Namespace.OpenDSObject("LDAP://DC=Fabrikam,DC=Com, vbNullString, vbNullString,  ADS_SECURE_AUTHENTICATION)
 
Set SecurityDescriptor = X.Get("ntSecurityDescriptor")
Debug.Print SecurityDescriptor.Owner
Debug.Print SecurityDescriptor.Group
 
Set Dacl = SecurityDescriptor.DiscretionaryAcl
Debug.Print Dacl.AceCount
 
For Each Obj In Dacl
   Debug.Print Obj.Trustee
   Debug.Print Obj.AccessMask
   Debug.Print Obj.AceFlags
   Debug.Print Obj.AceType
Next

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set X = Nothing
    Set Namespace = Nothing
    Set SecurityDescriptor = Nothing
    Set Dacl = Nothing

L'esempio di codice seguente enumera gli ACL da un'interfaccia di controllo dati.

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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione iads.h

Vedi anche

IADsAccessControlEntry

IADsSecurityDescriptor

Idispatch

DACLs null e DACLs vuoti