Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Aturan IrqlZwPassive menentukan bahwa driver hanya memanggil ZwClose saat dijalankan di IRQL = PASSIVE_LEVEL.
Model driver: WDM
Pemeriksaan bug ditemukan dengan aturan ini: Pemeriksaan Bug 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x2001F)
Contoh
Kode berikut melanggar aturan ini:
NTSTATUS
DriverCloseResources (
_In_ PDRIVER_CONTEXT Context
)
{
…
NT_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
//
// ExAcquireFastMutex sets the IRQL to APC_LEVEL, and the caller continues
// to run at APC_LEVEL after ExAcquireFastMutex returns.
//
ExAcquireFastMutex(&Context->FastMutex);
....
if (NULL != Context->Handle) {
//
// RULE VIOLATION! - ZwClose can be called only at PASSIVE_LEVEL
//
ZwClose(Context->Handle);
Context->Handle = NULL;
}
....
//
// N.B. ExReleaseFastMutex restores the original IRQL.
//
ExReleaseFastMutex(&Context->FastMutex);
....
}
Cara menguji
| Pada waktu kompilasi |
|---|
Jalankan Pemverifikasi Driver Statis dan tentukan aturan IrqlZwPassive . Gunakan langkah-langkah berikut untuk menjalankan analisis kode Anda:
Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver. |
| Pada durasi |
|---|
Jalankan Pemverifikasi Driver dan pilih opsi pemeriksaan kepatuhan DDI . |
Berlaku untuk
ZwCloseZwCreateKeyZwDeleteKeyZwEnumerateKeyZwEnumerateValueKeyZwFlushKeyZwOpenKeyZwQueryKeyZwQueryValueKeyZwSetValueKey