Bagikan melalui


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:
  1. Siapkan kode Anda (gunakan deklarasi jenis peran).
  2. Jalankan Pemverifikasi Driver Statis.
  3. Lihat dan analisis hasilnya.

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:

verifier /ruleclasses 35 /driver MyDriver.sys

ATAU

verifier /rc 35 /driver MyDriver.sys

Pemeriksaan IRQL tambahan akan aktif setelah PC di-boot ulang.

Berlaku untuk

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite