Bagikan melalui


Aturan IrqlIoRtlZwPassive (wdm)

Aturan IrqlIoRtlZwPassive menentukan bahwa driver memanggil DDI yang tercantum dalam aturan hanya ketika dijalankan di IRQL = PASSIVE_LEVEL.

Aturan ini menambah aturan IRQL Pemeriksaan Kepatuhan DDI untuk PASSIVE_LEVEL. Untuk informasi selengkapnya, lihat Seperangkat aturan Irql (WDM).

Model driver: WDM

Pemeriksaan bug ditemukan dengan aturan ini: Pemeriksaan Bug 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20023)

Contoh

Kode berikut melanggar aturan ini:

//
// KeAcquireSpinLock raises the IRQL to DISPATCH_LEVEL.
//

KeAcquireSpinLock (&Lock, &OldIrql);

//
// ERROR: IoGetDriverDirectory can only be called at IRQL == PASSIVE_LEVEL.
//

IoGetDriverDirectory (DriverObject,
                      DriverDirectoryData,
                      0,
                      &DirectoryHandle);

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 Verifier Driver Statis dan tentukan aturan IrqlIoRtlZwPassive .

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

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

IoGetDeviceDirectory

IoGetDriverDirectory

IoOpenDeviceInterfaceRegistryKey

IoopenDeviceRegistryKey

RtlCreateRegistryKey

RtlCreateSystemVolumeInformationFolder

RtlWriteRegistryValue

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKeyTransacted

ZwDeleteFile

ZwDeleteValueKey

ZwFlushBuffersFileEx

ZwFlushBuffersFile

ZwRenameKey

ZwSetEaFile

ZwSetInformationFile

ZwSetInformationKey