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.
Driver membentuk persentase signifikan dari total kode yang dijalankan dalam mode kernel. Driver kernel-mode adalah, pada dasarnya, sebuah komponen dari sistem operasi. Oleh karena itu, driver yang andal dan aman berkontribusi secara signifikan terhadap kepercayaan keseluruhan sistem operasi. Untuk membuat driver mode kernel yang andal, ikuti panduan berikut:
Mengamankan objek perangkat dengan benar.
Akses pengguna ke driver dan perangkat sistem dikontrol oleh deskriptor keamanan yang ditetapkan sistem ke objek perangkat. Paling sering, sistem mengatur parameter keamanan perangkat saat perangkat diinstal. Untuk informasi selengkapnya, lihat Membuat Penginstalan Perangkat Aman. Terkadang tepat bagi driver untuk memainkan peran dalam mengontrol akses ke perangkatnya. Untuk informasi selengkapnya, lihat Mengamankan Objek Perangkat.
Validasi objek perangkat dengan benar.
Jika driver membuat beberapa jenis objek perangkat, driver harus memeriksa jenis mana yang diterimanya di setiap IRP. Untuk informasi selengkapnya, lihat Kegagalan Memvalidasi Objek Perangkat.
Gunakan fungsi "string aman".
Saat memanipulasi string, driver harus menggunakan fungsi string aman alih-alih fungsi string yang disediakan dengan pustaka runtime bahasa C/C++. Untuk informasi selengkapnya, lihat Menggunakan Fungsi String Aman.
Memverifikasi handle objek.
Driver yang menerima handle objek sebagai input harus memverifikasi bahwa handle tersebut valid, aksesibel, dan merupakan tipe yang diharapkan. Untuk informasi selengkapnya tentang penggunaan pegangan objek, lihat topik berikut ini:
Mendukung multiprosesor dengan benar.
Jangan pernah berasumsi bahwa driver Anda hanya akan berjalan pada sistem prosesor tunggal. Untuk informasi tentang teknik pemrograman yang dapat Anda gunakan untuk memastikan bahwa driver Anda akan berfungsi dengan baik pada sistem multiprosesor, lihat topik berikut:
Menangani keadaan pengemudi dengan benar.
Penting untuk selalu memverifikasi bahwa driver Anda berada dalam keadaan yang Anda anggap. Misalnya, jika driver menerima IRP, apakah driver sudah melayani IRP dengan tipe yang sama? Jika pengemudi tidak memeriksa situasi ini, maka IRP pertama bisa hilang. Untuk informasi selengkapnya, lihat Kegagalan Memeriksa Status Driver.
Memvalidasi nilai input IRP.
Sangat penting, dari perspektif keandalan dan keamanan, untuk memvalidasi semua nilai yang terkait dengan IRP, seperti alamat dan panjang buffer. Topik berikut memberikan informasi tentang memvalidasi nilai input IRP:
DispatchReadWrite Menggunakan I/O Berpenyangga
DispatchReadWrite Menggunakan I/O Langsung
Kesalahan dalam Masukan/Keluaran Langsung
Tangani tumpukan I/O dengan benar.
Saat melewati IRP ke tumpukan driver, penting bagi driver untuk memanggil IoSkipCurrentIrpStackLocation atau IoCopyCurrentIrpStackLocationToNext untuk mengatur lokasi tumpukan I/O driver berikutnya. Jangan menulis kode yang langsung menyalin satu lokasi tumpukan I/O ke lokasi berikutnya.
Tangani operasi penyelesaian IRP dengan benar.
Seorang driver tidak boleh menyelesaikan IRP dengan nilai status STATUS_SUCCESS kecuali jika benar-benar mendukung dan memproses IRP. Untuk informasi tentang cara yang benar untuk menangani penyelesaian IRP, lihat Menyelesaikan IRP.
Tangani operasi pembatalan IRP dengan benar.
Operasi pembatalan mungkin sulit untuk dikodekan dengan benar karena biasanya dijalankan secara asinkron. Masalah dalam kode yang menangani operasi pembatalan dapat tidak terlihat dalam waktu yang lama, karena kode ini biasanya tidak sering dijalankan dalam sistem yang sedang beroperasi.
Pastikan untuk membaca dan memahami semua informasi yang disediakan di bawah Membatalkan IRP. Beri perhatian khusus pada Sinkronisasi Pembatalan IRP dan Poin yang Perlu Dipertimbangkan Saat Membatalkan IRP.
Salah satu cara untuk menghindari masalah sinkronisasi yang terkait dengan operasi pembatalan adalah dengan menerapkan antrean IRP batal-aman. Antrean IRP yang aman pembatalan adalah antrean yang dikelola oleh driver dan diperkenalkan sejak Windows XP dan versi sistem operasi yang lebih baru, tetapi juga kompatibel dengan versi yang lebih lama.
Tangani pembersihan IRP dan penutupan operasi dengan benar.
Pastikan Anda memahami perbedaan antara permintaan IRP_MJ_CLEANUP dan IRP_MJ_CLOSE. Permintaan pembersihan tiba setelah aplikasi menutup semua handel pada objek file, tetapi terkadang sebelum semua permintaan I/O selesai. Permintaan penutupan tiba setelah semua permintaan I/O untuk objek file telah selesai atau dibatalkan. Untuk informasi selengkapnya, lihat topik berikut ini:
Rutin DispatchCreate, DispatchClose, dan DispatchCreateClose
Untuk informasi selengkapnya tentang menangani IRP dengan benar, lihat Kesalahan Tambahan dalam Menangani IRP.
Menggunakan Pemverifikasi Driver
Driver Verifier adalah alat terpenting yang dapat Anda gunakan untuk memastikan keandalan driver Anda. Driver Verifier dapat memeriksa berbagai masalah umum driver, termasuk beberapa dari yang dibahas di bagian ini. Namun, penggunaan Driver Verifier tidak menggantikan desain perangkat lunak yang cermat dan bijaksana.