ADS_SECURITY_INFO_ENUM enumeración (iads.h)

La enumeración ADS_SECURITY_INFO_ENUM especifica las opciones disponibles para examinar los datos de seguridad de un objeto.

Syntax

typedef enum __MIDL___MIDL_itf_ads_0001_0077_0002 {
  ADS_SECURITY_INFO_OWNER = 0x1,
  ADS_SECURITY_INFO_GROUP = 0x2,
  ADS_SECURITY_INFO_DACL = 0x4,
  ADS_SECURITY_INFO_SACL = 0x8
} ADS_SECURITY_INFO_ENUM;

Constantes

 
ADS_SECURITY_INFO_OWNER
Valor: 0x1
Lee o establece los datos del propietario.
ADS_SECURITY_INFO_GROUP
Valor: 0x2
Lee o establece los datos del grupo.
ADS_SECURITY_INFO_DACL
Valor: 0x4
Lee o establece los datos de la lista de control de acceso discrecional.
ADS_SECURITY_INFO_SACL
Valor: 0x8
Lee o establece los datos de la lista de control de acceso del sistema.

Comentarios

Las opciones definidas en esta enumeración son máscaras de bits. Se puede establecer más de una opción mediante las operaciones bit a bit adecuadas.

Para leer los datos de seguridad de un objeto, use la interfaz IADsObjectOptions y proporcione las opciones de datos de seguridad enumeradas en esta enumeración.

En la lista siguiente se enumeran las combinaciones de marcas comunes y su uso.

Combinación de marcas Descripción
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP y ADS_SECURITY_INFO_DACL Permitir a los usuarios leer los datos de seguridad del propietario, grupo o DACL de un objeto. Esta es la configuración predeterminada cuando se crea un objeto.
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP, ADS_SECURITY_INFO_DACL y ADS_SECURITY_INFO_SACL Permitir que los usuarios lean la SACL. La marca ADS_SECURITY_INFO_SACL no se puede usar por sí misma.
 

Actualmente, estas opciones solo están disponibles para Active Directory.

Dado que Visual Basic Scripting Edition (VBScript) no puede leer datos de una biblioteca de tipos, una aplicación debe usar las constantes numéricas adecuadas, en lugar de las constantes simbólicas, para establecer las marcas adecuadas. Para usar las constantes simbólicas como práctica de programación recomendada, escriba declaraciones explícitas de estas constantes, como se hace aquí.

Ejemplos

En el ejemplo de código siguiente se muestra el número de entradas de control de acceso en una SACL.

Const ADS_SECURITY_INFO_OWNER = &H1
Const ADS_SECURITY_INFO_GROUP = &H2
Const ADS_SECURITY_INFO_DACL = &H4
Const ADS_SECURITY_INFO_SACL = &H8

Const ADS_OPTION_SECURITY_MASK = 3

Dim x As IADs
Dim dso As IADsOpenDSObject
Dim adsPath As String
Dim sd As IADsSecurityDescriptor
Dim sacl As IADsAccessControlList
Dim objOps As IADsObjectOptions
Dim opt As Variant
Dim canReadSacl As Variant
 
Set dso = GetObject("LDAP:")
adsPath = "LDAP://ArcSrv1/dc=Sales,dc=Fabrikam,dc=com"
Set x = dso.OpenDSObject(adsPath, vbNullString, vbNullString, 1)
Set objOps = x
 
canReadSacl = ADS_SECURITY_INFO_OWNER _
                Or ADS_SECURITY_INFO_GROUP _
                Or ADS_SECURITY_INFO_DACL _
                Or ADS_SECURITY_INFO_SACL
 
opt = objOps.GetOption(ADS_OPTION_SECURITY_MASK)
If opt <> canReadSacl Then
    objOps.SetOption ADS_OPTION_SECURITY_MASK, canReadSacl
End If
Set sd = x.Get("ntSecurityDescriptor")
Set sacl = sd.SystemAcl
Debug.Print "sacl(aceCount)= " & sacl.AceCount

En el ejemplo de código siguiente se muestra el número de entradas de control de acceso en una ACL del sistema. Por motivos de brevedad, se omite la comprobación de errores.

void TestObjectOptions()
{
    long lCanReadSACL = ADS_SECURITY_INFO_OWNER | 
        ADS_SECURITY_INFO_GROUP | 
        ADS_SECURITY_INFO_DACL | 
        ADS_SECURITY_INFO_SACL;

    HRESULT hr = S_OK;
    CComPtr<IADs> spObj;
    hr = ADsOpenObject(L"LDAP://arcSrv1/dc=Sales,dc=Fabrikam,dc=com", 
        NULL, 
        NULL,
        ADS_SECURE_AUTHENTICATION,
        IID_IADs,
        (void**)&spObj);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsObjectOptions> spObjOps;
    hr = spObj->QueryInterface(IID_IADsObjectOptions, (void**)&spObjOps);
    if(S_OK != hr)
    {
        return;
    }

    CComVariant svar;
    hr = spObjOps->GetOption(ADS_OPTION_SECURITY_MASK, &svar);
    if(S_OK != hr)
    {
        return;
    }

    if(V_I4(&svar) != lCanReadSACL)
    {
        svar = lCanReadSACL;
        hr = spObjOps->SetOption(ADS_OPTION_SECURITY_MASK, svar);
    }

    hr = spObj->Get(CComBSTR("ntSecurityDescriptor"), &svar);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsSecurityDescriptor> spSd;
    hr = V_DISPATCH(&svar)->QueryInterface(IID_IADsSecurityDescriptor, 
                                            (void**)&spSd);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IDispatch> spDisp;
    hr = spSd->get_SystemAcl(&spDisp);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsAccessControlList> spSacl;
    hr = spDisp->QueryInterface(IID_IADsAccessControlList, 
                                (void**)&spSacl);
    if(S_OK != hr)
    {
        return;
    }

    LONG lOptions;
    hr = spSacl->get_AceCount(&lOptions);
    if(S_OK != hr)
    {
        return;
    }

    _tprintf(TEXT("Number of ACE's in the SACL is %d\n"), lOptions);
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Encabezado iads.h

Consulte también

Enumeraciones ADSI

IADsObjectOptions

IADsObjectOptions::GetOption

IADsObjectOptions::SetOption