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 |