Bagikan melalui


Memaksa Pemeriksaan IRQL

Meskipun driver mode kernel dilarang mengakses memori yang dapat di-pageable pada IRQL tinggi atau saat menahan kunci putaran, tindakan seperti itu mungkin tidak diperhatikan jika halaman belum benar-benar dipangkas dari set kerja dan di-page out ke disk.

Ketika Pemeriksaan Force IRQL diaktifkan, Driver Verifier memberikan tekanan ekstrem pada penggunaan memori sistem. Setiap kali driver diverifikasi meminta kunci putar, memanggil KeSynchronizeExecution, atau menaikkan IRQL ke DISPATCH_LEVEL atau lebih tinggi, semua kumpulan, kode, dan data yang dapat di-pageable sistem (yang mencakup kode dan data yang dapat di-page driver) dipangkas dari set kerja. Jika driver mencoba mengakses salah satu memori ini, Driver Verifier mengeluarkan pemeriksaan bug.

Dimulai dengan Windows Vista, opsi ini juga menyebabkan Pemverifikasi Driver terdeteksi ketika objek sinkronisasi tertentu disertakan dalam memori yang dapat halaman. Objek sinkronisasi ini tidak dapat di-page karena kernel sistem operasi mengaksesnya di IRQL yang ditingkatkan. Driver Verifier dapat mendeteksi struktur KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE, dan FAST_MUTEX .

Tekanan pada penggunaan memori ini tidak akan secara langsung mempengaruhi driver yang tidak dipilih untuk verifikasi. Ketika driver yang tidak dipilih untuk verifikasi meningkatkan IRQL, itu tidak memicu tindakan pemangkasan. Namun, ketika driver yang sedang diverifikasi meningkatkan IRQL, Driver Verifier melakukan pemangkasan halaman yang dapat digunakan oleh driver yang tidak sedang diverifikasi. Jadi kesalahan yang dilakukan oleh driver yang tidak diverifikasi kadang-kadang mungkin tertangkap ketika opsi ini aktif.

Memantau Kenaikan IRQL dan Kunci Putar

Jumlah kenaikan IRQL, kunci putar, dan panggilan ke KeSynchronizeExecution yang dibuat oleh driver yang sedang diverifikasi dapat dipantau. Berapa kali Driver Verifier telah memangkas memori pageable dari set kerja juga dapat dipantau. Statistik ini dapat ditampilkan oleh Driver Verifier Manager, baris perintah Verifier.exe, atau dalam file log. Lihat Memantau Penghitung Global untuk detailnya.

Ekstensi debugger kernel !verifier juga dapat digunakan untuk memantau statistik ini. Ini menyajikan informasi yang mirip dengan Driver Verifier Manager. Di Windows XP dan yang lebih baru, ekstensi 0x8 !verifier akan menampilkan log perubahan IRQL terbaru yang dibuat oleh driver yang sedang diverifikasi. Untuk informasi tentang ekstensi debugger, lihat Penelusuran Kesalahan Windows.

Memanggil KeEnterCriticalRegion atau KeLeaveCriticalRegion di DISPATCH_LEVEL atau Di Atasnya

KeEnterCriticalRegion dan KeLeaveCriticalRegion adalah API yang dapat Anda gunakan untuk menyinkronkan eksekusi urutan penting kode driver dengan pengiriman panggilan prosedur asinkron kernel biasa (APC). API KeEnterCriticalRegion dan KeLeaveCriticalRegion tidak dapat dipanggil di IRQL = DISPATCH_LEVEL atau lebih tinggi. Memanggil KeEnterCriticalRegion atau KeLeaveCriticalRegion pada DISPATCH_LEVEL atau lebih tinggi dapat mengakibatkan sistem macet atau kerusakan memori.

Mulai windows 7, Driver Verifier mendeteksi panggilan ke API ini pada DISPATCH_LEVEL atau lebih tinggi jika opsi Paksa Pemeriksaan IRQL diaktifkan.

Mengaktifkan Opsi Ini

Anda dapat mengaktifkan fitur Force IRQL Checking 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 Pemeriksaan Force IRQL diwakili oleh Bit 1 (0x2). Untuk mengaktifkan Force IRQL Checking, gunakan nilai bendera 0x2 atau tambahkan 0x2 ke nilai bendera. Contohnya:

    verifier /flags 0x2 /driver MyDriver.sys
    

    Fitur ini akan aktif setelah boot berikutnya.

    Anda juga dapat mengaktifkan dan menonaktifkan Force IRQL Checking tanpa me-reboot komputer dengan menambahkan parameter /volatile ke perintah . Contohnya:

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

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

    Fitur Force IRQL Checking juga disertakan dalam pengaturan standar. Contohnya:

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

    1. Mulai Driver Verifier Manager. Ketik Pemverifikasi di jendela Prompt Perintah.
    2. Pilih Buat pengaturan kustom (untuk pengembang kode) lalu klik Berikutnya.
    3. Pilih Pilih pengaturan individual dari daftar lengkap.
    4. Pilih (centang) Paksa pemeriksaan IRQL.

    Fitur Force IRQL Checking juga disertakan dalam pengaturan standar. Untuk menggunakan fitur ini, di Driver Verifier Manager, klik Buat Pengaturan Standar.