Verifikasi I/O

Driver Verifier memiliki dua tingkat Verifikasi I/O:

  • Verifikasi I/O Tingkat 1 selalu aktif setiap kali Verifikasi I/O dipilih.

  • Verifikasi I/O Tingkat 2 selalu aktif setiap kali Verifikasi I/O dipilih di Windows XP dan yang lebih baru.

Lihat Juga:Verifikasi I/O yang Ditingkatkan Di Windows 7 dan versi yang lebih baru dari sistem operasi Windows, Verifikasi I/O yang Ditingkatkan diaktifkan secara otomatis saat Anda memilih Verifikasi I/O. Tidak tersedia atau diperlukan untuk memilihnya sebagai opsi terpisah.

Verifikasi I/O Tingkat 1

Ketika Verifikasi I/O Tingkat 1 diaktifkan, semua RUNP yang diperoleh melalui IoAllocateIrp dialokasikan dari kumpulan khusus dan penggunaannya dilacak.

Selain itu, Driver Verifier memeriksa panggilan I/O yang tidak valid, termasuk:

  • Mencoba membebaskan IRP yang jenisnya tidak IO_TYPE_IRP

  • Meneruskan objek perangkat yang tidak valid ke IoCallDriver

  • Meneruskan IRP ke IoCompleteRequest yang berisi status tidak valid atau yang masih memiliki set rutin pembatalan

  • Perubahan pada IRQL di seluruh panggilan ke rutinitas pengiriman driver

  • Mencoba membebaskan IRP yang tetap terkait dengan utas

  • Meneruskan objek perangkat ke IoInitializeTimer yang sudah berisi timer yang diinisialisasi

  • Meneruskan buffer yang tidak valid ke IoBuildAsynchronousFsdRequest atau IoBuildDeviceIoControlRequest

  • Meneruskan blok status I/O ke IRP, ketika blok status I/O ini dialokasikan pada tumpukan yang memiliki unwound terlalu jauh

  • Meneruskan objek peristiwa ke IRP, ketika objek kejadian ini dialokasikan pada tumpukan yang memiliki unwound terlalu jauh

Karena kumpulan IRP khusus berukuran terbatas, Verifikasi I/O paling efektif ketika hanya digunakan pada satu pengemudi pada satu waktu.

Kegagalan I/O Verification Level 1 menyebabkan pemeriksaan bug 0xC9 dikeluarkan. Parameter pertama dari pemeriksaan bug ini menunjukkan pelanggaran apa yang telah terjadi. Lihat 0xC9 Pemeriksaan Bug (DRIVER_VERIFIER_IOMANAGER_VIOLATION) untuk daftar parameter lengkap.

Verifikasi I/O Tingkat 2

Kesalahan I/O Verification Level 2 ditampilkan dengan cara yang berbeda: pada layar biru, dalam file crash dump, dan dalam debugger kernel.

Pada layar biru, kesalahan ini dicatat oleh pesan KESALAHAN VERIFIKASI SISTEM IO dan string WDM DRIVER ERRORXXX, di mana XXX adalah kode kesalahan I/O.

Dalam file crash dump, sebagian besar kesalahan ini dicatat oleh pesan BugCheck 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION), bersama dengan kode kesalahan I/O. Dalam hal ini, kode kesalahan I/O muncul sebagai parameter pertama dari pemeriksaan bug 0xC9. Sisanya dicatat oleh pesan Bug Check 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION), bersama dengan kode kesalahan Driver Verifier. Dalam hal ini, kode kesalahan Driver Verifier muncul sebagai parameter pertama dari pemeriksaan bug 0xC4.

Dalam debugger kernel (KD atau WinDbg), kesalahan ini dicatat oleh pesan KESALAHAN DRIVER WDM dan string teks deskriptif. Ketika debugger kernel aktif, dimungkinkan untuk mengabaikan kesalahan Tingkat 2 dan melanjutkan operasi sistem. (Ini tidak dimungkinkan dengan pemeriksaan bug lainnya.)

Layar biru, file crash dump, dan debugger kernel masing-masing menampilkan informasi tambahan juga. Untuk deskripsi lengkap sebagian besar pesan kesalahan Verifikasi I/O Tingkat 2, lihat 0xC9 Pemeriksaan Bug. Untuk sisanya, lihat 0xC4 Pemeriksaan Bug.

Mulai dari Window Vista, opsi Verifikasi I/O memeriksa kesalahan driver berikut:

  • Membutuhkan waktu terlalu lama untuk menyelesaikan dan membatalkan RUN yang berasal dari aplikasi mode pengguna.

  • Melepaskan kunci hapus yang belum diperoleh.

  • Memanggil IoReleaseRemoveLock atau IoReleaseRemoveLockAndWait dengan parameter tag yang berbeda dari parameter tag yang digunakan dalam panggilan IoAcquireRemoveLock yang sesuai.

  • Memanggil IoCallDriver dengan gangguan dinonaktifkan.

  • Memanggil IoCallDriver di IRQL lebih besar dari DISPATCH_LEVEL.

  • Kembali dari rutinitas pengiriman driver dengan gangguan dinonaktifkan.

  • Kembali dari rutinitas pengiriman driver dengan IRQL yang diubah.

  • Mengembalikan dari rutinitas pengiriman driver dengan APC dinonaktifkan. Dalam hal ini, driver mungkin telah memanggil KeEnterCriticalRegion lebih sering daripada KeLeaveCriticalRegion, yang merupakan penyebab utama untuk 0x20 Pemeriksaan Bug (KERNEL_APC_PENDING_DURING_EXIT) dan 0x1 Pemeriksaan Bug (APC_INDEX_MISMATCH).

Mulai dari Windows 7, opsi Verifikasi I/O memeriksa kesalahan driver berikut:

  • Mencoba membebaskan IRP dengan memanggil ExFreePool. RUNP harus dikosongkan dengan IoFreeIrp.

Selain itu, Anda dapat menggunakan opsi ini untuk mendeteksi bug driver umum lainnya—menginisialisasi ulang menghapus kunci. Hapus struktur data kunci harus dialokasikan di dalam ekstensi perangkat. Ini memastikan bahwa manajer I/O membebaskan memori yang memegang struktur IO_REMOVE_LOCK hanya ketika objek perangkat dihapus. Jika driver melakukan tiga langkah berikut, ada kemungkinan bahwa setelah langkah 2, aplikasi atau driver masih memegang referensi ke Device1:

  • Mengalokasikan struktur IO_REMOVE_LOCK yang sesuai dengan Device1, tetapi melakukan alokasi di luar ekstensi Device1.
  • Memanggil IoReleaseRemoveLockAndWait saat Device1 sedang dihapus.
  • Memanggil IoInitializeRemoveLock untuk kunci yang sama untuk menggunakannya kembali sebagai kunci hapus untuk Device2.

Ada kemungkinan bahwa setelah langkah 2 aplikasi atau driver masih memegang referensi ke Device1. Aplikasi atau driver masih dapat mengirim permintaan ke Device1, meskipun perangkat ini telah dihapus. Oleh karena itu, tidak aman untuk menggunakan kembali memori yang sama dengan kunci hapus baru sampai manajer I/O menghapus Device1. Menginisialisasi ulang kunci yang sama sementara utas lain mencoba memperolehnya dapat mengakibatkan kerusakan kunci, dengan hasil yang tidak dapat diprediksi untuk driver dan seluruh sistem.

Di Windows 7 dan versi yang lebih baru dari sistem operasi Windows, Verifikasi I/O yang Ditingkatkan secara otomatis diaktifkan saat Anda memilih Verifikasi I/O.

Mengaktifkan Opsi Ini

Anda dapat mengaktifkan fitur Verifikasi I/O untuk satu atau beberapa driver dengan menggunakan Driver Verifier Manager atau baris perintah Verifier.exe. Untuk detailnya, lihat Memilih Opsi Pemverifikasi Driver.

  • Pada baris perintah.

    Pada baris perintah, opsi Verifikasi I/O diwakili oleh Bit 4 (0x10). Untuk mengaktifkan Verifikasi I/O, gunakan nilai bendera 0x10 atau tambahkan 0x10 ke nilai bendera. Contohnya:

    verifier /flags 0x10 /driver MyDriver.sys
    

    Fitur ini akan aktif setelah boot berikutnya.

    Anda juga dapat mengaktifkan dan menonaktifkan Verifikasi I/O tanpa me-reboot komputer dengan menambahkan parameter /volatile ke perintah . Contohnya:

    verifier /volatile /flags 0x10 /adddriver MyDriver.sys
    

    Pengaturan ini segera efektif, tetapi hilang ketika Anda mematikan atau me-reboot komputer. Untuk detailnya, lihat Menggunakan Pengaturan Volatil.

    Fitur Verifikasi I/O juga disertakan dalam pengaturan standar. Contohnya:

    verifier /standard /driver MyDriver.sys
    
  • Menggunakan Driver Verifier Manager

    1. Pilih Buat pengaturan kustom (untuk pengembang kode) lalu klik Berikutnya.
    2. Pilih Pilih pengaturan individual dari daftar lengkap.
    3. Pilih (centang) Verifikasi I/O.

    Fitur Verifikasi I/O juga disertakan dalam pengaturan standar. Untuk menggunakan fitur ini, di Driver Verifier Manager, klik Buat Pengaturan Standar.