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
- Prima di tutto, recuperare il descrittore di sicurezza dell'oggetto che implementa l'interfaccia IADsSecurityDescriptor .
- In secondo luogo, recuperare l'ACL dal descrittore di sicurezza.
- In terzo luogo, usare ace o AES dell'oggetto nell'elenco di controllo di accesso.
Per rendere persistenti tutti gli ACL nuovi o modificati
- Aggiungere prima di tutto l'ACE all'ACL.
- In secondo luogo, assegnare l'ACL al descrittore di sicurezza.
- In terzo luogo, eseguire il commit del descrittore di sicurezza nell'archivio directory.
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 |