Interfaz IADsAccessControlList (iads.h)
La interfaz IADsAccessControlList es una interfaz dual que administra entradas de control de acceso individuales (ACE).
Herencia
La interfaz IADsAccessControlList hereda de la interfaz IDispatch . IADsAccessControlList también tiene estos tipos de miembros:
Métodos
La interfaz IADsAccessControlList tiene estos métodos.
IADsAccessControlList::AddAce El método IADsAccessControlList::AddAce agrega un objeto IADsAccessControlEntry al objeto IADsAccessControlList. |
IADsAccessControlList::CopyAccessList El método IADsAccessControlList::CopyAccessList copia todas las entradas de control de acceso (ACE) de la lista de control de acceso (ACL) en el espacio de proceso del autor de la llamada. |
IADsAccessControlList::get__NewEnum El método IADsAccessControlList::get__NewEnum se usa para obtener un objeto enumerador para que la ACL enumere ACL. |
IADsAccessControlList::RemoveAce Quita una entrada de control de acceso (ACE) de la lista de control de acceso (ACL). |
Comentarios
Una lista de control de acceso (ACL) es una colección de ACE que puede proporcionar un control de acceso más específico al mismo objeto ADSI para diferentes clientes. En general, los distintos proveedores implementan controles de acceso diferentes y, por lo tanto, el comportamiento del objeto es específico del proveedor. Para obtener más información, consulte la documentación del proveedor. Para obtener más información sobre los proveedores de Microsoft, consulta Proveedores de sistemas ADSI. Actualmente, solo el proveedor LDAP admite controles de acceso.
Antes de poder trabajar con una ACE de objeto, primero obtenga la ACL a la que pertenecen. Las ACL se administran mediante descriptores de seguridad y pueden ser de ACL discrecional y ACL del sistema. Para obtener más información, vea IADsSecurityDescriptor.
Con las propiedades y métodos de la interfaz IADsAccessControlList , puede recuperar y enumerar AE, agregar nuevas entradas a la lista o quitar entradas existentes.
Para administrar los controles de acceso a través de un ADSI
- En primer lugar, recupere el descriptor de seguridad del objeto que implementa la interfaz IADsSecurityDescriptor .
- En segundo lugar, recupere la ACL del descriptor de seguridad.
- En tercer lugar, trabaje con la ACE o ace del objeto en la ACL.
Para que las ACE nuevas o modificadas sean persistentes
- En primer lugar, agregue la ACE a la ACL.
- En segundo lugar, asigne la ACL al descriptor de seguridad.
- En tercer lugar, confirme el descriptor de seguridad en el almacén de directorios.
Ejemplos
En el ejemplo de código siguiente se muestra cómo trabajar con entradas de control de acceso de una ACL discrecional.
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
En el ejemplo de código siguiente se enumeran las ACE de una 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 | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Servidor mínimo compatible | Windows Server 2008 |
Plataforma de destino | Windows |
Encabezado | iads.h |