Aturan IrqlNtifsApcPassive (wdm)
Aturan IrqlNtifsApcPassive menentukan bahwa driver memanggil DDI yang tercantum dalam aturan hanya ketika dijalankan baik di IRQL = PASSIVE_LEVEL atau di IRQL <= APC_LEVEL.
Model driver: WDM
Pemeriksaan bug ditemukan dengan aturan ini: Pemeriksaan Bug 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20024)
Contoh
Kode berikut melanggar aturan ini:
//
// KeAcquireSpinLock raises the IRQL to DISPATCH_LEVEL.
//
KeAcquireSpinLock (&Lock, &OldIrql);
//
// ERROR: ZwWriteFile can only be called at IRQL == PASSIVE_LEVEL.
//
ZwWriteFile (Handle,
NULL,
NULL,
NULL,
IoStatusBlock,
Buffer,
BufferLength,
NULL,
NULL);
KeReleaseSpinLock (&Lock, OldIrql);
Untuk informasi selengkapnya tentang tingkat IRQL, lihat Mengirimkan Rutinitas dan RUNQL dan Mengelola Prioritas Perangkat Keras.
Cara menguji
Pada waktu kompilasi |
---|
Jalankan Pemverifikasi Driver Statis dan tentukan aturan IrqlNtifsApcPassive . Gunakan langkah-langkah berikut untuk menjalankan analisis kode Anda:
Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver. |
Pada durasi |
---|
Anda dapat mengaktifkan DDI Compliance - Aturan IRQL tambahan untuk satu atau beberapa driver dengan menggunakan baris perintah Verifier.exe. Untuk detailnya, lihat Memilih Opsi Pemverifikasi Driver. Anda harus memulai ulang komputer untuk mengaktifkan atau menonaktifkan DDI Compliance - Aturan IRQL tambahan. Pada baris perintah, Kepatuhan DDI - Pemeriksaan IRQL tambahan diwakili oleh nilai kelas aturan 35. Contohnya:
ATAU
Pemeriksaan IRQL tambahan akan aktif setelah PC di-boot ulang. |
Berlaku untuk
NtSetInformationFile
NtWriteFile
NtCreateFile
ZwWriteFile
CcCopyWrite
CcCopyWriteEx
CcDeferWrite
CcFastCopyWrite