Fungsi CreatePrivateObjectSecurityWithMultipleInheritance (securitybaseapi.h)
Fungsi CreatePrivateObjectSecurityWithMultipleInheritance mengalokasikan dan menginisialisasi deskriptor keamanan relatif mandiri untuk objek privat baru yang dibuat oleh manajer sumber daya yang memanggil fungsi ini. Fungsi ini mendukung objek privat (seperti objek Layanan Direktori dengan kelas tambahan terlampir) yang terdiri dari beberapa jenis atau kelas objek.
Sintaks
BOOL CreatePrivateObjectSecurityWithMultipleInheritance(
[in, optional] PSECURITY_DESCRIPTOR ParentDescriptor,
[in, optional] PSECURITY_DESCRIPTOR CreatorDescriptor,
[out] PSECURITY_DESCRIPTOR *NewDescriptor,
[in, optional] GUID **ObjectTypes,
[in] ULONG GuidCount,
[in] BOOL IsContainerObject,
[in] ULONG AutoInheritFlags,
[in, optional] HANDLE Token,
[in] PGENERIC_MAPPING GenericMapping
);
Parameter
[in, optional] ParentDescriptor
Penunjuk ke deskriptor keamanan untuk kontainer induk objek. Jika tidak ada kontainer induk, parameter ini adalah NULL.
[in, optional] CreatorDescriptor
Penunjuk ke deskriptor keamanan yang disediakan oleh pembuat objek. Jika pembuat objek tidak secara eksplisit meneruskan informasi keamanan untuk objek baru, parameter ini bisa NULL. Atau, parameter ini dapat menunjuk ke deskriptor keamanan default.
[out] NewDescriptor
Penunjuk ke variabel untuk menerima penunjuk ke deskriptor keamanan relatif mandiri yang baru dialokasikan. Setelah Anda selesai menggunakan pendeskripsi keamanan, bebaskan dengan memanggil
Fungsi DestroyPrivateObjectSecurity .
[in, optional] ObjectTypes
Array pointer ke struktur GUID yang mengidentifikasi jenis objek atau kelas objek yang terkait dengan NewDescriptor. Untuk objek Direktori Aktif, array ini berisi penunjuk ke GUID kelas dari kelas struktural objek dan semua kelas tambahan yang terpasang. Atur ObjectTypes ke NULL jika objek tidak memiliki GUID.
[in] GuidCount
Jumlah GUID yang ada dalam parameter ObjectTypes .
[in] IsContainerObject
Menentukan apakah objek baru dapat berisi objek lain. Nilai TRUE menunjukkan bahwa objek baru adalah kontainer. Nilai FALSE menunjukkan bahwa objek baru bukan kontainer.
[in] AutoInheritFlags
Sekumpulan bendera bit yang mengontrol bagaimana entri kontrol akses (ASE) diwarisi dari ParentDescriptor. Parameter ini bisa menjadi kombinasi dari nilai berikut.
Nilai | Makna |
---|---|
|
Daftar kontrol akses diskresi (DACL) baru berisi ACE yang diwarisi dari DACL ParentDescriptor, serta ACE eksplisit apa pun yang ditentukan dalam DACL CreatorDescriptor. Jika bendera ini tidak diatur, DACL baru tidak mewarisi ACE. |
|
Daftar kontrol akses sistem (SACL) baru berisi ACE yang diwarisi dari SACL ParentDescriptor, serta ACE eksplisit apa pun yang ditentukan dalam SACL CreatorDescriptor. Jika bendera ini tidak diatur, SACL baru tidak mewarisi ACE. |
|
CreatorDescriptor adalah deskriptor default untuk jenis objek yang ditentukan oleh ObjectTypes. Dengan demikian, CreatorDescriptor diabaikan jika ParentDescriptor memiliki ACE khusus objek untuk jenis objek yang ditentukan oleh parameter ObjectTypes . Jika tidak ada ACE seperti itu yang diwarisi, CreatorDescriptor ditangani seolah-olah bendera ini tidak ditentukan. |
|
Fungsi ini tidak melakukan pemeriksaan hak istimewa. Jika bendera SEF_AVOID_OWNER_CHECK juga diatur, parameter Token dapat berupa NULL. Bendera ini berguna saat menerapkan pewarisan otomatis untuk menghindari pemeriksaan hak istimewa pada setiap anak yang diperbarui. |
|
Fungsi ini tidak memeriksa validitas pemilik di NewDescriptor yang dihasilkan seperti yang dijelaskan di bagian Keterangan. Jika bendera SEF_AVOID_PRIVILEGE_CHECK juga diatur, parameter Token bisa NULL. |
|
Pemilik NewDescriptor default ke pemilik dari ParentDescriptor. Jika tidak diatur, pemilik NewDescriptor default ke pemilik token yang ditentukan oleh parameter Token . Pemilik token ditentukan dalam token itu sendiri. Dalam kedua kasus, jika parameter CreatorDescriptor bukan NULL, pemilik NewDescriptor diatur ke pemilik dari CreatorDescriptor. |
|
Grup NewDescriptor default ke grup dari ParentDescriptor. Jika tidak diatur, grup NewDescriptor default ke grup token yang ditentukan oleh parameter Token . Grup token ditentukan dalam token itu sendiri. Dalam kedua kasus, jika parameter CreatorDescriptor bukan NULL, grup NewDescriptor diatur ke grup dari CreatorDescriptor. |
|
Prinsipal dengan tingkat wajib yang lebih rendah dari objek tidak dapat menulis ke objek. |
|
Prinsipal dengan tingkat wajib yang lebih rendah dari objek tidak dapat membaca objek. |
|
Prinsipal dengan tingkat wajib yang lebih rendah dari objek tidak dapat menjalankan objek. |
|
Batasan apa pun yang ditentukan oleh parameter ParentDescriptor yang akan membatasi kemampuan pemanggil untuk menentukan DACL di CreatorDescriptor diabaikan. |
[in, optional] Token
Handel ke token akses untuk proses klien atas nama siapa objek sedang dibuat. Jika ini adalah token peniruan identitas, token tersebut harus berada di tingkat SecurityIdentification atau yang lebih tinggi. Untuk deskripsi lengkap tingkat peniruan Identitas Keamanan, lihat jenis SECURITY_IMPERSONATION_LEVEL enumerasi.
Token klien berisi informasi keamanan default, seperti pemilik default, grup utama, dan DACL. Fungsi ini menggunakan default ini jika informasi tidak ada dalam deskriptor keamanan input. Token harus terbuka untuk akses TOKEN_QUERY .
Jika semua kondisi berikut benar, maka handel harus dibuka untuk akses TOKEN_DUPLICATE selain akses TOKEN_QUERY .
- Handel token mengacu pada token utama.
- Deskriptor keamanan token berisi satu atau beberapa ACE dengan OwnerRights SID.
- Deskriptor keamanan ditentukan untuk parameter CreatorDescriptor .
- Pemanggil fungsi ini tidak mengatur bendera SEF_AVOID_OWNER_RESTRICTION dalam parameter AutoInheritFlags .
[in] GenericMapping
Penunjuk ke struktur GENERIC_MAPPING yang menentukan pemetaan dari setiap hak generik ke hak tertentu untuk objek.
Nilai kembali
Jika fungsi berhasil, fungsi mengembalikan nilai bukan nol.
Jika fungsi gagal, fungsi akan mengembalikan nol. Panggil GetLastError untuk informasi kesalahan yang diperluas. Beberapa kode kesalahan yang diperluas dan maknanya tercantum dalam tabel berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Fungsi tidak dapat mengambil grup utama untuk deskriptor keamanan baru. |
|
Fungsi tidak dapat mengambil pemilik untuk deskriptor keamanan baru atau pengidentifikasi keamanan (SID) tidak dapat ditetapkan sebagai pemilik. Ini terjadi ketika memvalidasi SID pemilik terhadap token yang diteruskan. |
|
Fungsi menerima NULL alih-alih token untuk validasi pemilik atau pemeriksaan hak istimewa . |
|
SACL sedang diatur, SEF_AVOID_PRIVILEGE_CHECK tidak diteruskan, dan token yang diteruskan tidak mengaktifkan SE_SECURITY_NAME. |
Keterangan
Fungsi CreatePrivateObjectSecurityEx identik dengan memanggil fungsi CreatePrivateObjectSecurityWithMultipleInheritance dengan satu GUID di ObjectTypes.
AutoInheritFlags berbeda dari bit bernama serupa di anggota Kontrol struktur SECURITY_DESCRIPTOR. Untuk penjelasan tentang bit kontrol, lihat SECURITY_DESCRIPTOR_CONTROL.
Jika AutoInheritFlags menentukan bit SEF_DACL_AUTO_INHERIT, fungsi menerapkan aturan berikut ke DACL di deskriptor keamanan baru:
- Bendera SE_DACL_AUTO_INHERITED diatur di anggota Kontrol pendeskripsi keamanan baru.
- DACL deskriptor keamanan baru mewarisi ACE dari ParentDescriptor terlepas dari apakah CreatorDescriptor adalah deskriptor keamanan default atau secara eksplisit ditentukan oleh pembuat. DACL baru adalah kombinasi dari DACL induk dan pembuat seperti yang didefinisikan oleh aturan pewarisan. Secara khusus, setiap ACE di ParentDescriptor yang dapat diwariskan baik ke semua objek turunan atau ke kelas objek apa pun yang tercantum dalam ObjectTypes akan diterapkan ke DACL baru.
- ACE yang diwariskan ditandai sebagai INHERITED_ACE.
Untuk DACL dan SACL, jenis ACE tertentu di ParentDescriptor dan CreatorDescriptor akan dimanipulasi dan mungkin digantikan oleh dua ACE di NewDescriptor. Secara khusus, ACE yang dapat diwariskan yang berisi setidaknya salah satu elemen yang dapat dipetakan berikut dapat mengakibatkan dua ACE dalam deskriptor keamanan output. Elemen yang dapat dipetakan meliputi:
- Hak akses generik dalam ACCESS_MASK
- Creator Owner SID atau Creator Group SID sebagai pengidentifikasi subjek ACE
- ACE yang merupakan salinan aslinya, tetapi dengan bendera INHERIT_ONLY diatur. Namun, ACE ini tidak akan dibuat jika salah satu dari dua kondisi berikut ada:
- Parameter IsContainerObject adalah FALSE. ACE yang dapat diwariskan tidak berarti pada objek nonkontainer.
- ACE asli berisi bendera NO_PROPAGATE_INHERIT. ACE asli dimaksudkan untuk diwariskan sebagai ACE yang efektif pada anak-anak, tetapi tidak dapat diwariskan di bawah anak-anak tersebut.
- ACE yang efektif di mana bit INHERITED_ACE diaktifkan dan elemen generik dipetakan ke elemen tertentu:
- Hak akses generik digantikan oleh hak akses standar dan spesifik yang sesuai yang ditunjukkan dalam input GenericMapping.
- SID Pemilik Pembuat diganti dengan Pemilik di NewDescriptor yang dihasilkan
- Creator Group SID diganti dengan Grup di NewDescriptor yang dihasilkan
- Harus menyertakan SE_GROUP_OWNER
- Tidak boleh menyertakan SE_GROUP_USE_FOR_DENY_ONLY
Untuk membuat deskriptor keamanan untuk objek baru, panggil CreatePrivateObjectSecurityWithMultipleInheritance dengan ParentDescriptor yang diatur ke deskriptor keamanan kontainer induk dan CreatorDescriptor yang diatur ke deskriptor keamanan yang diusulkan oleh pembuat objek.
Untuk memverifikasi deskriptor keamanan saat ini pada objek, panggil CreatePrivateObjectSecurityWithMultipleInheritance dengan ParentDescriptor yang diatur ke deskriptor keamanan kontainer induk dan CreatorDescriptor yang diatur ke deskriptor keamanan objek saat ini. Panggilan ini memastikan bahwa ACE diwarisi dengan tepat dari deskriptor keamanan induk ke anak.
Jika deskriptor keamanan CreatorDescriptor berisi SACL, Token harus mengaktifkan hak istimewa SE_SECURITY_NAME atau pemanggil harus menentukan bendera SEF_AVOID_PRIVILEGE_CHECK di AutoInheritFlags.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | securitybaseapi.h (termasuk Windows.h) |
Pustaka | Advapi32.lib |
DLL | Advapi32.dll |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk