Share via


Métodos de propiedad IADsAccessControlEntry

Los métodos de propiedad de la interfaz IADsAccessControlEntry obtienen o establecen las propiedades descritas en la tabla siguiente. Para obtener más información, vea Interface Property Methods.

Propiedades

AccessMask

Contiene un conjunto de marcas que especifica los privilegios de acceso para el objeto. Los valores válidos para los objetos de Active Directory se definen en la enumeración ADS_RIGHTS_ENUM .

Para obtener más información y una lista de valores posibles para objetos de recursos compartidos de archivos o archivos, vea Seguridad de archivos y derechos de acceso.

Para obtener más información y una lista de valores posibles para los objetos del Registro, consulte Derechos de acceso y seguridad de clave del Registro.

Tipo de acceso: lectura/escritura

Tipo de datos de scripting: LONG

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

AceFlags

Contiene un conjunto de marcas que especifica si otros contenedores u objetos pueden heredar la ACE. Los valores válidos para el objeto de Active Directory se definen en la enumeración ADS_ACEFLAG_ENUM .

Para obtener más información y valores posibles para los objetos de archivo, recurso compartido de archivos y registro, vea el miembro AceFlags de la estructura de ACE_HEADER .

Tipo de acceso: lectura/escritura

Tipo de datos de scripting: LONG

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

AceType

Contiene un valor que indica el tipo de ACE. Los valores válidos para los objetos de Active Directory se definen en la enumeración ADS_ACETYPE_ENUM .

Para obtener más información y valores posibles para los objetos de archivo, recurso compartido de archivos y registro, vea el miembro AceType de la estructura ACE_HEADER .

Tipo de acceso: lectura/escritura

Tipo de datos de scripting: LONG

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

Marcas

Marca que indica si la ACE tiene un tipo de objeto o un tipo de objeto heredado. Las marcas válidas se definen en la enumeración ADS_FLAGTYPE_ENUM .

Tipo de acceso: lectura/escritura

Tipo de datos de scripting: LONG

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

InheritedObjectType

Marca que indica el tipo de un objeto secundario de un objeto ADSI. Su valor es un GUID para un objeto en formato de cadena. Cuando se establece este GUID , la ACE solo se aplica al objeto al que hace referencia el GUID.

Tipo de acceso: lectura/escritura

Tipo de datos de scripting: BSTR

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

ObjectType

Marca que indica el tipo de objeto ADSI. Su valor es un GUID para una propiedad o un objeto en formato de cadena. El GUID hace referencia a una propiedad cuando se usan ADS_RIGHT_DS_READ_PROP y ADS_RIGHT_DS_WRITE_PROP máscaras de acceso. El GUID especifica un objeto cuando se usan ADS_RIGHT_DS_CREATE_CHILD y ADS_RIGHT_DS_DELETE_CHILD máscaras de acceso.

Tipo de acceso: lectura/escritura

Tipo de datos de scripting: BSTR

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

Fideicomisario

Contiene el nombre de la cuenta a la que se aplica la ACE.

Tipo de acceso: lectura/escritura

Tipo de datos de scripting: BSTR

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

Ejemplos

En el ejemplo de código siguiente se muestra cómo agregar entradas a una ACL discrecional mediante los métodos de propiedad 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

En el ejemplo de código siguiente se muestran entradas de control de acceso.

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
Encabezado
Iads.h
Archivo DLL
Activeds.dll
IID
IID_IADsAccessControlEntry se define como B4F3A14C-9BDD-11D0-852C-00C04FD8D503

Consulte también

IADsAccessControlEntry

IADsAccessControlList

IADsSecurityDescriptor