enumerazione ADS_SECURITY_INFO_ENUM (iads.h)

L'enumerazione ADS_SECURITY_INFO_ENUM specifica le opzioni disponibili per esaminare i dati di sicurezza di un oggetto.

Sintassi

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;

Costanti

 
ADS_SECURITY_INFO_OWNER
Valore: 0x1
Legge o imposta i dati del proprietario.
ADS_SECURITY_INFO_GROUP
Valore: 0x2
Legge o imposta i dati del gruppo.
ADS_SECURITY_INFO_DACL
Valore: 0x4
Legge o imposta i dati dell'elenco di controllo di accesso discrezionale.
ADS_SECURITY_INFO_SACL
Valore: 0x8
Legge o imposta i dati dell'elenco di controllo di accesso del sistema.

Commenti

Le opzioni definite in questa enumerazione sono maschere di bit. È possibile impostare più opzioni usando le operazioni bit per bit appropriate.

Per leggere i dati di sicurezza per un oggetto, usare l'interfaccia IADsObjectOptions , fornendo le opzioni dei dati di sicurezza elencate in questa enumerazione.

Nell'elenco seguente sono elencate le combinazioni di flag comuni e il relativo utilizzo.

Combinazione di flag Descrizione
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP e ADS_SECURITY_INFO_DACL Consentire agli utenti di leggere i dati di sicurezza del proprietario, del gruppo o dell'elenco DACL di un oggetto. Questa è l'impostazione predefinita quando viene creato un oggetto.
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP, ADS_SECURITY_INFO_DACL e ADS_SECURITY_INFO_SACL Consentire agli utenti di leggere SACL. Il flag ADS_SECURITY_INFO_SACL non può essere utilizzato da solo.
 

Attualmente, queste opzioni sono disponibili solo per Active Directory.

Poiché Visual Basic Scripting Edition (VBScript) non è in grado di leggere i dati da una libreria dei tipi, un'applicazione deve usare le costanti numeriche appropriate, anziché le costanti simboliche, per impostare i flag appropriati. Per usare le costanti simboliche come procedura di programmazione consigliata, scrivere dichiarazioni esplicite di tali costanti, come fatto qui.

Esempio

Nell'esempio di codice seguente viene visualizzato il numero di voci di controllo di accesso in un elenco 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

Nell'esempio di codice seguente viene visualizzato il numero di voci di controllo di accesso in un elenco di controllo di accesso. Per brevità, il controllo degli errori viene omesso.

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);
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Intestazione iads.h

Vedi anche

Enumerazioni ADSI

IADsObjectOptions

IADsObjectOptions::GetOption

IADsObjectOptions::SetOption