Keamanan Utas dan Hak Akses

Microsoft Windows memungkinkan Anda mengontrol akses ke objek utas. Untuk informasi selengkapnya tentang keamanan, lihat Model Kontrol Akses.

Anda dapat menentukan deskriptor keamanan untuk utas saat memanggil fungsi CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThread, atau CreateRemoteThread . Jika Anda menentukan NULL, utas akan mendapatkan pendeskripsi keamanan default. ACL dalam deskriptor keamanan default untuk utas berasal dari token utama atau peniruan dari pembuat.

Untuk mengambil deskriptor keamanan utas, panggil fungsi GetSecurityInfo . Untuk mengubah deskriptor keamanan utas, panggil fungsi SetSecurityInfo .

Handel yang dikembalikan oleh fungsi CreateThread memiliki akses THREAD_ALL_ACCESS ke objek utas. Saat Anda memanggil fungsi GetCurrentThread , sistem mengembalikan pseudohandle dengan akses maksimum yang diizinkan oleh deskriptor keamanan utas.

Hak akses yang valid untuk objek utas mencakup hak akses standar dan beberapa hak akses khusus utas. Tabel berikut mencantumkan hak akses standar yang digunakan oleh semua objek.

Nilai Makna
HAPUS (0x00010000L) Diperlukan untuk menghapus objek.
READ_CONTROL (0x00020000L) Diperlukan untuk membaca informasi dalam deskriptor keamanan untuk objek , tidak termasuk informasi dalam SACL. Untuk membaca atau menulis SACL, Anda harus meminta hak akses ACCESS_SYSTEM_SECURITY . Untuk informasi selengkapnya, lihat Hak Akses SACL.
SINKRONKAN (0x00100000L) Hak untuk menggunakan objek untuk sinkronisasi. Ini memungkinkan utas untuk menunggu hingga objek dalam status disinyalkan.
WRITE_DAC (0x00040000L) Diperlukan untuk mengubah DACL di deskriptor keamanan untuk objek .
WRITE_OWNER (0x00080000L) Diperlukan untuk mengubah pemilik dalam deskriptor keamanan untuk objek.

 

Tabel berikut mencantumkan hak akses khusus utas.

Nilai Makna
SINKRONKAN (0x00100000L) Memungkinkan penggunaan handel utas di salah satu fungsi tunggu.
THREAD_ALL_ACCESS Semua kemungkinan hak akses untuk objek utas. Windows Server 2003 dan Windows XP: Nilai bendera THREAD_ALL_ACCESS meningkat pada Windows Server 2008 dan Windows Vista. Jika aplikasi yang dikompilasi untuk Windows Server 2008 dan Windows Vista dijalankan pada Windows Server 2003 atau Windows XP, bendera THREAD_ALL_ACCESS berisi bit akses yang tidak didukung dan fungsi yang menentukan bendera ini gagal dengan ERROR_ACCESS_DENIED. Untuk menghindari masalah ini, tentukan set minimum hak akses yang diperlukan untuk operasi. Jika THREAD_ALL_ACCESS harus digunakan, atur _WIN32_WINNT ke sistem operasi minimum yang ditargetkan oleh aplikasi Anda (misalnya, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Untuk informasi selengkapnya, lihat Menggunakan Header Windows.
THREAD_DIRECT_IMPERSONATION (0x0200) Diperlukan untuk utas server yang meniru klien.
THREAD_GET_CONTEXT (0x0008) Diperlukan untuk membaca konteks utas menggunakan GetThreadContext.
THREAD_IMPERSONATE (0x0100) Diperlukan untuk menggunakan informasi keamanan utas secara langsung tanpa memanggilnya dengan menggunakan mekanisme komunikasi yang menyediakan layanan peniruan identitas.
THREAD_QUERY_INFORMATION (0x0040) Diperlukan untuk membaca informasi tertentu dari objek utas, seperti kode keluar (lihat GetExitCodeThread).
THREAD_QUERY_LIMITED_INFORMATION (0x0800) Diperlukan untuk membaca informasi tertentu dari objek utas (lihat GetProcessIdOfThread). Handel yang memiliki hak akses THREAD_QUERY_INFORMATION secara otomatis diberikan THREAD_QUERY_LIMITED_INFORMATION. Windows Server 2003 dan Windows XP: Hak akses ini tidak didukung.
THREAD_SET_CONTEXT (0x0010) Diperlukan untuk menulis konteks utas menggunakan SetThreadContext.
THREAD_SET_INFORMATION (0x0020) Diperlukan untuk mengatur informasi tertentu di objek utas.
THREAD_SET_LIMITED_INFORMATION (0x0400) Diperlukan untuk mengatur informasi tertentu di objek utas. Handel yang memiliki hak akses THREAD_SET_INFORMATION secara otomatis diberikan THREAD_SET_LIMITED_INFORMATION. Windows Server 2003 dan Windows XP: Hak akses ini tidak didukung.
THREAD_SET_THREAD_TOKEN (0x0080) Diperlukan untuk mengatur token peniruan identitas untuk utas menggunakan SetThreadToken.
THREAD_SUSPEND_RESUME (0x0002) Diperlukan untuk menangguhkan atau melanjutkan utas (lihat SuspendThread dan ResumeThread).
THREAD_TERMINATE (0x0001) Diperlukan untuk mengakhiri utas menggunakan TerminateThread.

 

Anda dapat meminta akses ACCESS_SYSTEM_SECURITY langsung ke objek utas jika Anda ingin membaca atau menulis SACL objek. Untuk informasi selengkapnya, lihat Daftar Kontrol Akses (ACL) dan Hak Akses SACL.

Proses yang Dilindungi

Proses yang dilindungi meningkatkan dukungan untuk Manajemen Hak Digital. Sistem membatasi akses ke proses yang dilindungi dan utas proses yang dilindungi.

Windows Server 2003 dan Windows XP: Proses yang dilindungi ditambahkan dimulai dengan Windows Vista.

Hak akses khusus berikut ini tidak diizinkan dari proses ke utas proses yang dilindungi:

THREAD_ALL_ACCESS
THREAD_DIRECT_IMPERSONATION
THREAD_GET_CONTEXT
THREAD_IMPERSONATE
THREAD_QUERY_INFORMATION
THREAD_SET_CONTEXT
THREAD_SET_INFORMATION
THREAD_SET_TOKEN
THREAD_TERMINATE

Hak THREAD_QUERY_LIMITED_INFORMATION diperkenalkan untuk memberikan akses ke subset informasi yang tersedia melalui THREAD_QUERY_INFORMATION.