Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Proses dan manajer utas mode kernel Windows yang disediakan oleh sistem mengontrol bagaimana proses dan utas dijalankan dalam sistem operasi Windows. Memahami manajer ini sangat penting bagi pengembang driver kernel mode yang perlu membuat thread, memantau pembuatan proses, atau menyinkronkan akses ke sumber daya bersama.
Sampel driver ObCallback menunjukkan cara menggunakan rutinitas pemberitahuan proses dan utas dalam driver mode kernel.
Gambaran umum proses dan utas
Proses adalah program perangkat lunak yang saat ini berjalan di Windows dan diidentifikasi oleh ID proses unik (PID). Dalam setiap proses, satu atau beberapa utas mewakili unit eksekusi aktual yang menjalankan kode program. Setiap benang juga memiliki ID benang (TID) unik dalam prosesnya.
Utas memungkinkan menjalankan beberapa tugas dengan berbagi waktu prosesor. Pada mesin prosesor tunggal, beberapa utas dapat dialokasikan tetapi hanya satu yang dijalankan pada satu waktu. Prosesor dengan cepat beralih antar utas, menciptakan ilusi eksekusi simultan. Pada sistem multi-prosesor, eksekusi paralel benar terjadi ketika utas berjalan secara bersamaan pada prosesor yang berbeda.
Proses mode kernel Windows dan pengelola utas menangani eksekusi semua utas dalam suatu proses. Apakah Anda memiliki satu prosesor atau lebih, perhatian besar harus diambil dalam pemrograman driver untuk memastikan bahwa semua utas proses Anda dirancang sehingga tidak peduli urutan apa utas ditangani, driver Anda beroperasi dengan benar.
Jika utas dari proses yang berbeda mencoba menggunakan sumber daya yang sama secara bersamaan, masalah dapat terjadi. Windows menyediakan beberapa teknik untuk menghindari masalah ini. Teknik memastikan bahwa utas dari proses yang berbeda tidak menyentuh sumber daya yang sama disebut sinkronisasi. Untuk informasi selengkapnya tentang sinkronisasi, lihat Teknik Sinkronisasi.
Rutinitas yang menyediakan antarmuka langsung ke proses dan manajer utas biasanya diawali dengan huruf "Ps"; misalnya, PsCreateSystemThread. Untuk daftar DDI kernel, lihat Kernel Windows.
Praktik terbaik untuk menerapkan proses dan fungsi panggilan balik terkait utas
Serangkaian pedoman ini berlaku untuk rutinitas panggilan balik ini:
- PCREATE_PROCESS_NOTIFY_ROUTINE
- PCREATE_PROCESS_NOTIFY_ROUTINE_EX
- PCREATE_THREAD_NOTIFY_ROUTINE
- PLOAD_IMAGE_NOTIFY_ROUTINE
- POB_PRE_OPERATION_CALLBACK
- POB_POST_OPERATION_CALLBACK
Gunakan praktik terbaik ini:
- Jaga agar rutinitas tetap pendek dan sederhana.
- Jangan melakukan panggilan ke layanan mode pengguna untuk memvalidasi proses, utas, atau gambar.
- Jangan melakukan panggilan ke registri.
- Jangan melakukan pemblokiran dan/atau panggilan fungsi Interprocess Communication (IPC).
- Jangan sinkronkan dengan utas lain karena dapat menyebabkan kebuntuan masuk kembali.
- Gunakan Utas Pekerja Sistem untuk mengantri tugas, terutama yang melibatkan:
- API lambat atau API yang memanggil proses lain.
- Setiap perilaku pemblokiran yang dapat mengganggu thread dalam layanan inti.
- Jika Anda menggunakan Thread Pekerja Sistem, jangan menunggu sampai pekerjaan selesai. Melakukannya menggagalkan tujuan mengantrikan pekerjaan agar diselesaikan secara asinkron.
- Perhatikan praktik terbaik untuk penggunaan tumpukan mode kernel. Misalnya, lihat Bagaimana cara mencegah driver saya kehabisan tumpukan mode kernel? dan Konsep dan Tips Driver Kunci.
Proses Subsistem
Mulai Windows 10, Subsistem Windows untuk Linux (WSL) memungkinkan pengguna menjalankan biner Linux ELF64 asli di Windows, bersama aplikasi Windows lainnya. Untuk informasi tentang arsitektur WSL dan komponen mode pengguna dan mode kernel yang diperlukan untuk menjalankan biner, lihat postingan di Subsistem Windows untuk blog Linux .
Salah satu komponennya adalah proses subsistem yang menghosting biner Linux mode pengguna yang tidak dimodifikasi, seperti /bin/bash. Proses subsistem tidak berisi struktur data yang terkait dengan proses Win32, seperti Process Environment Block (PEB) dan Thread Environment Block (TEB). Untuk proses subsistem, panggilan sistem dan pengecualian mode pengguna diproses oleh driver yang dipasangkan.
Berikut adalah perubahan pada rutinitas pengelola proses dan utas untuk mendukung proses subsistem:
Jenis WSL ditunjukkan oleh nilai SubsystemInformationTypeWSL dalam enumerasi SUBSYSTEM_INFORMATION_TYPE . Driver dapat memanggil NtQueryInformationProcess dan NtQueryInformationThread untuk menentukan subsistem yang mendasar. Panggilan tersebut mengembalikan SubsystemInformationTypeWSL untuk WSL.
Driver mode kernel lainnya dapat mendapatkan pemberitahuan tentang pembuatan/penghapusan proses subsistem dengan mendaftarkan rutinitas panggilan balik mereka melalui panggilan PsSetCreateProcessNotifyRoutineEx2 . Untuk mendapatkan pemberitahuan tentang pembuatan/penghapusan utas, driver dapat memanggil PsSetCreateThreadNotifyRoutineEx, dan menentukan PsCreateThreadNotifySubsystems sebagai jenis pemberitahuan.
Struktur PS_CREATE_NOTIFY_INFO diperluas untuk menyertakan anggota IsSubsystemProcess yang menunjukkan subsistem selain Win32. Anggota lain seperti FileObject, ImageFileName, CommandLine menunjukkan informasi tambahan tentang proses subsistem. Untuk informasi tentang perilaku anggota tersebut, lihat SUBSYSTEM_INFORMATION_TYPE.