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

  1. Pertama, ambil deskriptor keamanan objek yang mengimplementasikan antarmuka IADsSecurityDescriptor .
  2. Kedua, ambil ACL dari deskriptor keamanan.
  3. Ketiga, bekerja dengan ACE, atau ACE, dari objek di ACL.

Untuk membuat ACE baru atau yang dimodifikasi persisten

  1. Pertama, tambahkan ACE ke ACL.
  2. Kedua, tetapkan ACL ke deskriptor keamanan.
  3. Ketiga, terapkan deskriptor keamanan ke penyimpanan direktori.
Untuk informasi selengkapnya tentang DACL, lihat DACL Null dan DACL Kosong.

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

Lihat juga

IADsAccessControlEntry

IADsSecurityDescriptor

IDispatch

DACL Null dan DACL Kosong