Interface IADsAccessControlList (iads.h)
A interface IADsAccessControlList é uma interface dupla que gerencia ACEs (entradas de controle de acesso) individuais.
Herança
A interface IADsAccessControlList herda da interface IDispatch . IADsAccessControlList também tem estes tipos de membros:
Métodos
A interface IADsAccessControlList tem esses métodos.
IADsAccessControlList::AddAce O método IADsAccessControlList::AddAce adiciona um objeto IADsAccessControlEntry ao objeto IADsAccessControlList. |
IADsAccessControlList::CopyAccessList O método IADsAccessControlList::CopyAccessList copia cada ACE (entrada de controle de acesso) na ACL (lista de controle de acesso) para o espaço de processo do chamador. |
IADsAccessControlList::get__NewEnum O método IADsAccessControlList::get__NewEnum é usado para obter um objeto enumerador para a ACL enumerar ACEs. |
IADsAccessControlList::RemoveAce Remove uma ACE (entrada de controle de acesso) da ACL (lista de controle de acesso). |
Comentários
Uma ACL (lista de controle de acesso) é uma coleção de ACEs que podem fornecer controle de acesso mais específico ao mesmo objeto ADSI para clientes diferentes. Em geral, diferentes provedores implementam controles de acesso diferentes e, portanto, o comportamento do objeto é específico para o provedor. Para obter mais informações, consulte a documentação do provedor. Para obter mais informações sobre provedores da Microsoft, consulte Provedores de sistema ADSI. Atualmente, somente o provedor LDAP dá suporte a controles de acesso.
Antes de trabalhar com um OBJETO ACE, primeiro obtenha a ACL à qual eles pertencem. As ACLs são gerenciadas por descritores de segurança e podem ser de ACL discricionária e ACL do sistema. Para obter mais informações, consulte IADsSecurityDescriptor.
Usando as propriedades e os métodos da interface IADsAccessControlList , você pode recuperar e enumerar ACEs, adicionar novas entradas à lista ou remover entradas existentes.
Para gerenciar controles de acesso em um ADSI
- Primeiro, recupere o descritor de segurança do objeto que implementa a interface IADsSecurityDescriptor .
- Em segundo lugar, recupere a ACL do descritor de segurança.
- Em terceiro lugar, trabalhe com o ACE, ou ACEs, do objeto na ACL.
Para tornar os ACEs novos ou modificados persistentes
- Primeiro, adicione o ACE à ACL.
- Em segundo lugar, atribua a ACL ao descritor de segurança.
- Em terceiro lugar, confirme o descritor de segurança no repositório de diretórios.
Exemplos
O exemplo de código a seguir mostra como trabalhar com entradas de controle de acesso de uma ACL discricionária.
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
O exemplo de código a seguir enumera ACEs de uma DACL.
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;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista |
Servidor mínimo com suporte | Windows Server 2008 |
Plataforma de Destino | Windows |
Cabeçalho | iads.h |