Bagikan melalui


Membaca Set Hak Akses Kontrol dalam ACL Objek

Dengan menggunakan ADSI, Anda membaca hak akses kontrol ACE sama seperti Anda membaca ACE lainnya dalam ACL. Ketahuilah bahwa Anda juga dapat menggunakan API keamanan Win32 untuk membaca ACL pada objek direktori. Namun, hak akses kontrol menggunakan properti antarmukaIADsAccessControlEntrydengan cara yang khusus untuk memberikan dan menolak hak akses kontrol:

  • AccessMask harus berisi ADS_RIGHT_DS_CONTROL_ACCESS.
  • nilai Flags adalah ADS_FLAG_OBJECT_TYPE_PRESENT.
  • ObjectType adalah bentuk string atribut rightsGUID dari hak akses kontrol. Format string GUID adalah format string yang sama dengan fungsi StringFromGUID2 COM Library.
  • AceTypeADS_ACETYPE_ACCESS_ALLOWED_OBJECT untuk memberikan hak akses kontrol kepada wali amanat atau ADS_ACETYPE_ACCESS_DENIED_OBJECT untuk menolak hak akses kontrol wali amanat.
  • Trustee adalah perwakilan keamanan; yaitu pengguna, grup, komputer, dan sebagainya, tempat ACE berlaku.

Gunakan prosedur berikut untuk membaca ACE untuk objek ADSI. Prosedur berikut berlaku untuk aplikasi C dan C++.

Membaca ACE untuk objek ADSI

  1. Dapatkan penunjuk antarmuka IADs ke objek.
  2. Gunakan metode IADs::Get untuk mendapatkan pendeskripsi keamanan dari objek. Nama properti yang berisi deskriptor keamanan adalah "nTSecurityDescriptor". Properti akan dikembalikan sebagai VARIAN yang berisi pointer IDispatch. Ketahuilah bahwa anggota vt adalah VT_DISPATCH. Panggil QueryInterface pada pointer IDispatch tersebut untuk mendapatkan antarmuka IADsSecurityDescriptor guna memakai metode pada antarmuka tersebut untuk mengakses ACL deskriptor keamanan.
  3. Gunakan metode IADsSecurityDescriptor::get_DiscretionaryAcluntuk mendapatkan ACL. Metode mengembalikan pointer IDispatch. Panggil QueryInterface pada pointer IDispatch tersebut untuk mendapatkan antarmuka IADsAccessControlList, lalu gunakan metode pada antarmuka tersebut untuk mengakses ACE individual dalam ACL.
  4. Gunakan metode IADsAccessControlList::get__NewEnumuntuk menghitung ACE. Metode mengembalikan pointer IUnknown. Panggil QueryInterface pada pointer IUnknown untuk mendapatkan antarmuka IEnumVARIANT.
  5. Gunakan metode IEnumVARIANT::Next untuk menghitung ACE di ACL. Properti dikembalikan sebagai VARIAN yang berisi pointer IDispatch. Perlu diketahui bahwa anggota adalah VT_DISPATCH. Panggil QueryInterface pada penunjuk IDispatch tersebut untuk mendapatkan antarmuka IADsAccessControlEntry untuk membaca ACE.
  6. Panggil metode IADsAccessControlEntry::get_AccessMask untuk mendapatkan AccessMask dan periksa bahwa nilai AccessMask untuk bendera ADS_RIGHT_DS_CONTROL_ACCESS adalah benar. Jika memiliki bendera ini, ACE berisi hak akses kontrol.
  7. Panggil IADsAccessControlEntry::get_Flags metode untuk mendapatkan bendera untuk jenis objek.
  8. Periksa bendera untuk nilai dan bendera ADS_FLAG_OBJECT_TYPE_PRESENT. Jika Bendera diset ke ADS_FLAG_OBJECT_TYPE_PRESENT, panggil metode IADsAccessControlEntry::get_ObjectType untuk mendapatkan string yang berisi rightsGUID dari hak akses kontrol yang diterapkan oleh ACE.
  9. Panggil metode IADsAccessControlEntry::get_AceType untuk mendapatkan jenis ACE. Jenisnya akan menjadi ADS_ACETYPE_ACCESS_ALLOWED_OBJECT untuk memberikan hak akses kontrol penuh kepada penerima amanat atau ADS_ACETYPE_ACCESS_DENIED_OBJECT untuk menolak hak akses kontrol penuh.
  10. Panggil metode IADsAccessControlEntry::get_Trustee untuk mendapatkan prinsipal keamanan; yaitu pengguna, grup, komputer, dan sebagainya yang diterapkan ACE.
  11. Setelah selesai dengan ObjectType dan Trustee string, gunakan SysFreeString untuk membebaskan memori dari string tersebut.
  12. Setelah selesai dengan antarmuka, panggil Rilis untuk menurunkan atau merilis semua referensi antarmuka.