Bagikan melalui


enumerasi ADS_SECURITY_INFO_ENUM (iads.h)

Enumerasi ADS_SECURITY_INFO_ENUM menentukan opsi yang tersedia untuk memeriksa data keamanan objek.

Sintaks

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;

Konstanta

 
ADS_SECURITY_INFO_OWNER
Nilai: 0x1
Membaca atau mengatur data pemilik.
ADS_SECURITY_INFO_GROUP
Nilai: 0x2
Membaca atau mengatur data grup.
ADS_SECURITY_INFO_DACL
Nilai: 0x4
Membaca atau mengatur data daftar kontrol akses diskresi.
ADS_SECURITY_INFO_SACL
Nilai: 0x8
Membaca atau mengatur data daftar kontrol akses sistem.

Keterangan

Opsi yang ditentukan dalam enumerasi ini adalah bit-mask. Lebih dari satu opsi dapat diatur menggunakan operasi bitwise yang sesuai.

Untuk membaca data keamanan untuk objek, gunakan antarmuka IADsObjectOptions , menyediakan opsi data keamanan yang tercantum dalam enumerasi ini.

Daftar berikut mencantumkan kombinasi bendera umum dan penggunaannya.

Kombinasi bendera Deskripsi
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP dan ADS_SECURITY_INFO_DACL Memungkinkan pengguna membaca data keamanan pemilik, grup, atau DACL objek. Ini adalah pengaturan default ketika objek dibuat.
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP, ADS_SECURITY_INFO_DACL, dan ADS_SECURITY_INFO_SACL Mengaktifkan pengguna untuk membaca SACL. Bendera ADS_SECURITY_INFO_SACL tidak dapat digunakan dengan sendirinya.
 

Saat ini, opsi tersebut hanya tersedia untuk Direktori Aktif.

Karena Visual Basic Scripting Edition (VBScript) tidak dapat membaca data dari pustaka jenis, aplikasi harus menggunakan konstanta numerik yang sesuai, alih-alih konstanta simbolis, untuk mengatur bendera yang sesuai. Untuk menggunakan konstanta simbolis sebagai praktik pemrograman yang baik, tulis deklarasi eksplisit konstanta tersebut, seperti yang dilakukan di sini.

Contoh

Contoh kode berikut menampilkan jumlah entri kontrol akses dalam 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

Contoh kode berikut menampilkan jumlah entri kontrol akses dalam ACL sistem. Untuk keringkasan, pemeriksaan kesalahan dihilangkan.

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

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista
Server minimum yang didukung Windows Server 2008
Header iads.h

Lihat juga

Enumerasi ADSI

IADsObjectOptions

IADsObjectOptions::GetOption

IADsObjectOptions::SetOption