Compartilhar via


ADS_SECURITY_INFO_ENUM enumeração (iads.h)

A enumeração ADS_SECURITY_INFO_ENUM especifica as opções disponíveis para examinar os dados de segurança de um 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
Lê ou define os dados do proprietário.
ADS_SECURITY_INFO_GROUP
Valor: 0x2
Lê ou define os dados do grupo.
ADS_SECURITY_INFO_DACL
Valor: 0x4
Lê ou define os dados da lista de controle de acesso discricionário.
ADS_SECURITY_INFO_SACL
Valor: 0x8
Lê ou define os dados da lista de controle de acesso do sistema.

Comentários

As opções definidas nesta enumeração são máscaras de bits. Mais de uma opção pode ser definida usando operações bit a bit apropriadas.

Para ler os dados de segurança de um objeto, use a interface IADsObjectOptions , fornecendo as opções de dados de segurança listadas nesta enumeração.

A lista a seguir lista combinações de sinalizadores comuns e seu uso.

Combinação de sinalizadores Descrição
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP e ADS_SECURITY_INFO_DACL Permitir que os usuários leiam os dados de segurança do proprietário, grupo ou DACL de um objeto. Essa é a configuração padrão quando um objeto é criado.
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP, ADS_SECURITY_INFO_DACL e ADS_SECURITY_INFO_SACL Permitir que os usuários leiam a SACL. O sinalizador ADS_SECURITY_INFO_SACL não pode ser usado por si só.
 

Atualmente, essas opções estão disponíveis apenas para o Active Directory.

Como o Visual Basic Scripting Edition (VBScript) não pode ler dados de uma biblioteca de tipos, um aplicativo deve usar as constantes numéricas apropriadas, em vez das constantes simbólicas, para definir os sinalizadores apropriados. Para usar as constantes simbólicas como uma boa prática de programação, escreva declarações explícitas dessas constantes, conforme feito aqui.

Exemplos

O exemplo de código a seguir exibe o número de entradas de controle de acesso em uma 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

O exemplo de código a seguir exibe o número de entradas de controle de acesso em uma ACL do sistema. Para resumir, a verificação de erros é omitida.

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 Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Cabeçalho iads.h

Confira também

Enumerações ADSI

IADsObjectOptions

IADsObjectOptions::GetOption

IADsObjectOptions::SetOption