Fungsi SetPrivateObjectSecurityEx (securitybaseapi.h)
Fungsi SetPrivateObjectSecurityEx memodifikasi pendeskripsi keamanan objek privat yang dikelola oleh manajer sumber daya yang memanggil fungsi ini. Fungsi SetPrivateObjectSecurityEx memiliki parameter bendera yang menentukan apakah manajer sumber daya mendukung pewarisan otomatis entri kontrol akses (ACE).
Sintaks
BOOL SetPrivateObjectSecurityEx(
[in] SECURITY_INFORMATION SecurityInformation,
[in] PSECURITY_DESCRIPTOR ModificationDescriptor,
[in, out] PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
[in] ULONG AutoInheritFlags,
[in] PGENERIC_MAPPING GenericMapping,
[in, optional] HANDLE Token
);
Parameter
[in] SecurityInformation
Bagian dari deskriptor keamanan yang akan diatur. Nilai ini bisa menjadi kombinasi dari bendera bit SECURITY_INFORMATION .
[in] ModificationDescriptor
Penunjuk ke struktur SECURITY_DESCRIPTOR . Bagian dari deskriptor keamanan ini yang ditunjukkan oleh parameter SecurityInformation diterapkan ke deskriptor keamanan ObjectsSecurityDescriptor .
[in, out] ObjectsSecurityDescriptor
Penunjuk ke penunjuk ke struktur SECURITY_DESCRIPTOR . Deskriptor keamanan ini harus dalam bentuk relatif mandiri . Memori untuk deskriptor keamanan harus dialokasikan dari timbunan proses (GetProcessHeap) dengan fungsi HeapAlloc.
Pada input, ini adalah pendeskripsi keamanan objek privat saat ini. Fungsi memodifikasinya untuk menghasilkan deskriptor keamanan baru. Jika perlu, fungsi SetPrivateObjectSecurityEx mengalokasikan memori tambahan untuk menghasilkan deskriptor keamanan yang lebih besar.
[in] AutoInheritFlags
Menentukan pewarisan otomatis ACE. Jika server yang dilindungi tidak menerapkan pewarisan otomatis, server harus menentukan nol; jika tidak, ini dapat menentukan kombinasi nilai berikut, yang ditentukan dalam Winnt.h.
Nilai | Makna |
---|---|
|
Daftar kontrol akses diskresi (DACL) baru berisi ACE yang diwarisi dari DACL induk objek, serta ACE eksplisit apa pun yang ditentukan dalam DACL ModificationDescriptor. Jika bendera ini tidak diatur, DACL baru tidak mewarisi ACE. |
|
Daftar kontrol akses sistem (SACL) baru berisi ACE yang diwarisi dari SACL deskriptor keamanan yang terkait dengan induk objek, serta ACE eksplisit apa pun yang ditentukan dalam SACL ModificationDescriptor. Jika bendera ini tidak diatur, SACL baru tidak mewarisi ACE. |
|
Fungsi ini tidak melakukan pemeriksaan hak istimewa. Jika bendera SEF_AVOID_OWNER_CHECK juga diatur, parameter Token dapat berupa NULL. Gunakan bendera ini saat menerapkan pewarisan otomatis untuk menghindari pemeriksaan hak istimewa pada setiap anak yang diperbarui. |
|
Fungsi ini tidak memeriksa validitas pemilik dalam ObjectsSecurityDescriptor yang dihasilkan seperti yang dijelaskan dalam Keterangan. Jika bendera SEF_AVOID_PRIVILEGE_CHECK juga diatur, parameter Token dapat berupa NULL. |
|
Pemilik ObjectsSecurityDescriptor default ke pemilik induk objek. Jika bendera ini tidak diatur, pemilik ObjectsSecurityDescriptor default ke pemilik token yang ditentukan oleh parameter Token . Pemilik token ditentukan dalam token itu sendiri. Dalam kedua kasus, jika parameter ModificationDescriptor bukan NULL, pemilik ObjectsSecurityDescriptor diatur ke pemilik dari ModificationDescriptor. |
|
Grup ObjectsSecurityDescriptor default ke grup dari pemilik induk objek. Jika bendera ini tidak diatur, grup ObjectsSecurityDescriptor default ke grup token yang ditentukan oleh parameter Token . Grup token ditentukan dalam token itu sendiri. Dalam kedua kasus, jika parameter ModificationDescriptor bukan NULL, grup ObjectsSecurityDescriptor diatur ke grup dari ModificationDescriptor. |
|
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 mengeksekusi objek. |
|
Batasan apa pun yang ditentukan oleh pemilik induk objek yang akan membatasi kemampuan pemanggil untuk menentukan DACL di ObjectsSecurityDescriptor diabaikan. |
[in] GenericMapping
Penunjuk ke struktur GENERIC_MAPPING yang menentukan hak akses spesifik dan standar yang sesuai dengan setiap hak akses generik.
[in, optional] Token
Mengidentifikasi token akses untuk klien yang atas nama keamanan objek privat sedang dimodifikasi. Parameter ini diperlukan untuk memastikan bahwa klien telah memberikan nilai yang sah untuk pengidentifikasi keamanan pemilik (SID) baru. Token harus terbuka untuk akses TOKEN_QUERY.
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan bukan nol.
Jika fungsi gagal, fungsi akan mengembalikan nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Jika parameter AutoInheritFlags adalah nol, SetPrivateObjectSecurityEx identik dengan fungsi SetPrivateObjectSecurity .
Fungsi ini hanya ditujukan untuk digunakan oleh manajer sumber daya. Untuk menerapkan semantik kontrol akses Windows standar untuk memperbarui deskriptor keamanan, manajer sumber daya harus memverifikasi bahwa kondisi berikut terpenuhi sebelum memanggil SetPrivateObjectSecurityEx:
- Jika pemilik objek sedang diatur, proses panggilan harus memiliki izin WRITE_OWNER atau menjadi pemilik objek.
- Jika DACL objek sedang diatur, proses panggilan harus memiliki izin WRITE_DAC atau menjadi pemilik objek.
- Jika SACL objek sedang diatur, hak istimewa SE_SECURITY_NAME harus diaktifkan untuk proses panggilan.
Proses yang memanggil fungsi ini tidak boleh meniru klien karena klien biasanya tidak memiliki hak istimewa yang sesuai yang diperlukan untuk operasi token yang mendasar.
Jika AutoInheritFlags menentukan bit SEF_DACL_AUTO_INHERIT, fungsi menerapkan aturan berikut ke DACL untuk membuat deskriptor keamanan baru dari deskriptor saat ini:
- Jika bendera SE_DACL_PROTECTED tidak diatur dalam bit kontrol pendeskripsi keamanan saat ini atau ModificationDescriptor, fungsi membuat deskriptor keamanan output dari ACE yang diwariskan dari deskriptor keamanan saat ini dan ACE ModificationDescriptor yang tidak diwariskan. Artinya, tidak mungkin untuk mengubah ACE yang diwariskan dengan mengubah daftar kontrol akses (ACL) pada objek. Perilaku ini mempertahankan ACE yang diwariskan saat diwarisi dari kontainer induk.
Editor ACL harus membuat ACE yang diwariskan tidak tersedia untuk mencegahnya dimodifikasi.
- Jika SE_DACL_PROTECTED diatur dalam ModificationDescriptor, deskriptor keamanan saat ini diabaikan. Deskriptor keamanan output dibangun sebagai salinan ModificationDescriptor dengan bit INHERITED_ACE dimatikan.
Idealnya editor ACL harus menonaktifkan bit INHERITED_ACE yang menunjukkan kepada pemanggilnya bahwa ACE yang diwarisi dari induk objek sekarang sedang diatur secara eksplisit pada objek.
- Jika SE_DACL_PROTECTED diatur dalam deskriptor keamanan saat ini dan bukan di ModificationDescriptor, deskriptor keamanan saat ini diabaikan. Deskriptor keamanan output dibuat sebagai salinan ModificationDescriptor. Adalah tanggung jawab pemanggil untuk memastikan bahwa ACE yang benar mengaktifkan bit INHERITED_ACE.
Untuk DACL dan SACL, jenis ACE tertentu di ObjectsSecurityDescriptor input dan di ModificationDescriptor akan digantikan oleh dua ACE dalam ObjectsSecurityDescriptor output. Secara khusus, ACE yang dapat diwariskan yang berisi setidaknya salah satu elemen yang dapat dipetakan berikut akan menghasilkan dua ACE dalam output ObjectsSecurityDescriptor. Elemen yang dapat dipetakan meliputi:
- Hak akses generik dalam struktur ACCESS_MASK
- Creator Owner SID atau Creator Group SID sebagai pengidentifikasi subjek ACE
- ACE yang merupakan salinan aslinya, tetapi dengan bendera INHERIT_ONLY diatur
- ACE 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 dalam output SecurityDescriptor
- Creator Group SID diganti dengan Grup dalam output SecurityDescriptor
- Harus berupa SID yang dibentuk secara hukum
- Harus cocok dengan TokenUser di Token
- Harus cocok dengan grup di TokenGroups di Token tempat atribut pada grup:
- Sertakan SE_GROUP_OWNER
- Sertakan SE_GROUP_USE_FOR_DENY_ONLY
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
Fungsi Access Control Klien/Server