Bagikan melalui


Pemeriksaan IRQL Paksa

Meskipun driver mode kernel dilarang mengakses memori yang dapat dipaging pada IRQL tinggi atau sambil memegang spin lock, tindakan seperti itu mungkin tidak diperhatikan jika halaman belum benar-benar dipangkas dari set kerja dan dipindahkan ke disk.

Ketika Force IRQL Checking diaktifkan, Driver Verifier memberikan tekanan ekstrem pada penggunaan memori sistem. Setiap kali driver yang diverifikasi meminta kunci putar, memanggil KeSynchronizeExecution, atau menaikkan IRQL ke DISPATCH_LEVEL atau lebih tinggi, semua kumpulan memori, kode, dan data dapat dipindahkan ke halaman sistem (termasuk kode dan data driver yang dapat dipindahkan ke halaman) dikeluarkan 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 mendeteksi kapan objek sinkronisasi tertentu disertakan dalam memori yang dapat di-pageable. Objek sinkronisasi ini tidak dapat di-petakan karena kernel sistem operasi mengaksesnya pada tingkat IRQL tinggi. Driver Verifier dapat mendeteksi struktur pageable KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE, dan FAST_MUTEX.

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

Memantau Kenaikan IRQL dan Pengunci Berputar

Jumlah kenaikan IRQL, kunci putar, dan panggilan ke KeSynchronizeExecution yang dilakukan oleh driver yang 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 Pemantauan Penghitung Global untuk informasi lebih lanjut.

Ekstensi debugger kernel !verifier juga dapat digunakan untuk memantau statistik ini. Ini menyajikan informasi serupa dengan Driver Verifier Manager. Di Windows XP dan yang lebih baru, ekstensi !verifier 0x8 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 atas

KeEnterCriticalRegion dan KeLeaveCriticalRegion adalah API yang dapat Anda gunakan untuk menyinkronkan eksekusi urutan kode driver yang penting dengan pengiriman panggilan prosedur asinkron (APC) kernel biasa. 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 kerusakan sistem atau memori.

Dimulai pada Windows 7, Pemverifikasi Driver mendeteksi panggilan ke API ini pada DISPATCH_LEVEL atau lebih tinggi jika opsi Pemeriksaan IRQL Paksa 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 Pemeriksaan IRQL Paksa, 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 Pengelola Verifikasi Pengemudi

    1. Mulai Manajer Verifikasi Driver. Ketik Pemverifikasi di jendela Command Prompt.
    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.