Antarmuka IADsAccessControlList (iads.h)
Antarmuka IADsAccessControlList adalah antarmuka ganda yang mengelola entri kontrol akses (ACE) individual.
Warisan
Antarmuka IADsAccessControlList mewarisi dari antarmuka IDispatch . IADsAccessControlList juga memiliki jenis anggota ini:
Metode
Antarmuka IADsAccessControlList memiliki metode ini.
IADsAccessControlList::AddAce Metode IADsAccessControlList::AddAce menambahkan objek IADsAccessControlEntry ke objek IADsAccessControlList. |
IADsAccessControlList::CopyAccessList Metode IADsAccessControlList::CopyAccessList menyalin setiap entri kontrol akses (ACE) di daftar kontrol akses (ACL) ke ruang proses pemanggil. |
IADsAccessControlList::get__NewEnum Metode IADsAccessControlList::get__NewEnum digunakan untuk mendapatkan objek enumerator bagi ACL untuk menghitung ACE. |
IADsAccessControlList::RemoveAce Menghapus entri kontrol akses (ACE) dari daftar kontrol akses (ACL). |
Keterangan
Daftar kontrol akses (ACL) adalah kumpulan ACE yang dapat memberikan kontrol akses yang lebih spesifik ke objek ADSI yang sama untuk klien yang berbeda. Secara umum, penyedia yang berbeda menerapkan kontrol akses yang berbeda dan oleh karena itu perilaku objek khusus untuk penyedia. Untuk informasi selengkapnya, lihat dokumentasi penyedia. Untuk informasi selengkapnya tentang penyedia Microsoft, lihat Penyedia Sistem ADSI. Saat ini, hanya penyedia LDAP yang mendukung kontrol akses.
Sebelum Anda dapat bekerja dengan objek ACE, pertama-tama dapatkan ACL tempat mereka berada. ACL dikelola oleh deskriptor keamanan dan dapat berupa ACL diskresi dan ACL sistem. Untuk informasi selengkapnya, lihat IADsSecurityDescriptor.
Dengan menggunakan properti dan metode antarmuka IADsAccessControlList , Anda dapat mengambil dan menghitung ACE, menambahkan entri baru ke daftar, atau menghapus entri yang ada.
Untuk mengelola kontrol akses melalui ADSI
- Pertama, ambil deskriptor keamanan objek yang mengimplementasikan antarmuka IADsSecurityDescriptor .
- Kedua, ambil ACL dari deskriptor keamanan.
- Ketiga, bekerja dengan ACE, atau ACE, dari objek di ACL.
Untuk membuat ACE baru atau yang dimodifikasi persisten
- Pertama, tambahkan ACE ke ACL.
- Kedua, tetapkan ACL ke deskriptor keamanan.
- Ketiga, terapkan deskriptor keamanan ke penyimpanan direktori.
Contoh
Contoh kode berikut menunjukkan cara bekerja dengan entri kontrol akses dari ACL diskresi.
Dim X As IADs
Dim Namespace As IADsOpenDSObject
Dim SecurityDescriptor As IADsSecurityDescriptor
Dim Dacl As IADsAccessControlList
On Error GoTo Cleanup
Set Namespace = GetObject("LDAP://")
Set X= Namespace.OpenDSObject("LDAP://DC=Fabrikam,DC=Com, vbNullString, vbNullString, ADS_SECURE_AUTHENTICATION)
Set SecurityDescriptor = X.Get("ntSecurityDescriptor")
Debug.Print SecurityDescriptor.Owner
Debug.Print SecurityDescriptor.Group
Set Dacl = SecurityDescriptor.DiscretionaryAcl
Debug.Print Dacl.AceCount
For Each Obj In Dacl
Debug.Print Obj.Trustee
Debug.Print Obj.AccessMask
Debug.Print Obj.AceFlags
Debug.Print Obj.AceType
Next
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set X = Nothing
Set Namespace = Nothing
Set SecurityDescriptor = Nothing
Set Dacl = Nothing
Contoh kode berikut menghitung ACE dari DACL.
IADs *pADs = NULL;
IDispatch *pDisp = NULL;
IADsSecurityDescriptor *pSD = NULL;
VARIANT var;
HRESULT hr = S_OK;
VariantInit(&var);
hr = ADsOpenObject(L"LDAP://OU=Sales, DC=Fabrikam,DC=com",NULL,NULL,
ADS_SECURE_AUTHENTICATION, IID_IADs,(void**)&pADs);
if(FAILED(hr)) {goto Cleanup;}
hr = pADs->Get(CComBSTR("ntSecurityDescriptor"), &var);
if(FAILED(hr)) {goto Cleanup;}
pDisp = V_DISPATCH(&var);
hr = pDisp->QueryInterface(IID_IADsSecurityDescriptor,(void**)&pSD);
if(FAILED(hr)) {goto Cleanup;}
pDisp->Release();
pSD->get_DiscretionaryAcl(&pDisp);
hr = pDisp->QueryInterface(IID_IADsAccessControlList,(void**)&pACL);
if(FAILED(hr)) {goto Cleanup;}
hr = DisplayAccessInfo(pSD);
if(FAILED(hr)) {goto Cleanup;}
VariantClear(&var);
Cleanup:
if(pADs) pADs->Release();
if(pDisp) pDisp->Release();
if(pSD) pSD->Release();
return hr;
HRESULT DisplayAccessInfo(IADsSecurityDescriptor *pSD)
{
LPWSTR lpszFunction = L"DisplayAccessInfo";
IDispatch *pDisp = NULL;
IADsAccessControlList *pACL = NULL;
IADsAccessControlEntry *pACE = NULL;
IEnumVARIANT *pEnum = NULL;
IUnknown *pUnk = NULL;
HRESULT hr = S_OK;
ULONG nFetch = 0;
BSTR bstrValue = NULL;
VARIANT var;
LPWSTR lpszOutput = NULL;
LPWSTR lpszMask = NULL;
size_t nLength = 0;
VariantInit(&var);
hr = pSD->get_DiscretionaryAcl(&pDisp);
if(FAILED(hr)){goto Cleanup;}
hr = pDisp->QueryInterface(IID_IADsAccessControlList,(void**)&pACL);
if(FAILED(hr)){goto Cleanup;}
hr = pACL->get__NewEnum(&pUnk);
if(FAILED(hr)){goto Cleanup;}
hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
if(FAILED(hr)){goto Cleanup;}
hr = pEnum->Next(1,&var,&nFetch);
while(hr == S_OK)
{
if(nFetch==1)
{
if(VT_DISPATCH != V_VT(&var))
{
goto Cleanup;
}
pDisp = V_DISPATCH(&var);
hr = pDisp->QueryInterface(IID_IADsAccessControlEntry,(void**)&pACE);
if(SUCCEEDED(hr))
{
lpszMask = L"Trustee: %s";
hr = pACE->get_Trustee(&bstrValue);
nLength = wcslen(lpszMask) + wcslen(bstrValue) + 1;
lpszOutput = new WCHAR[nLength];
swprintf_s(lpszOutput,lpszMask,bstrValue);
printf(lpszOutput);
delete [] lpszOutput;
SysFreeString(bstrValue);
pACE->Release();
pACE = NULL;
pDisp->Release();
pDisp = NULL;
}
VariantClear(&var);
}
hr = pEnum->Next(1,&var,&nFetch);
}
Cleanup:
if(pDisp) pDisp->Release();
if(pACL) pACL->Release();
if(pACE) pACE->Release();
if(pEnum) pEnum->Release();
if(pUnk) pUnk->Release();
if(szValue) SysFreeString(szValue);
return hr;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista |
Server minimum yang didukung | Windows Server 2008 |
Target Platform | Windows |
Header | iads.h |