Seperangkat aturan IRQL (WDM)
Gunakan aturan ini untuk memverifikasi bahwa driver Anda melakukan panggilan DDI di IRQL yang diperlukan.
Driver yang tidak mengikuti aturan IRQL dapat menyebabkan masalah serius selama operasi yang dapat menyebabkan kondisi kebuntuan atau crash komputer.
Di bagian ini
Topik | Deskripsi |
---|---|
Aturan ForwardedAtBadIrql menentukan bahwa driver harus memanggil IoCallDriver dan PoCallDriver di IRQL<DISPATCH_LEVEL kecuali kode fungsi utama IRP yang diteruskan adalah salah satu dari berikut ini: |
|
Aturan ForwardedAtBadIrqlAllocate menentukan bahwa driver harus memanggil IoCallDriver dan PoCallDriver di IRQL<DISPATCH_LEVEL, kecuali kode fungsi utama IRP yang diteruskan adalah salah satu hal berikut: |
|
Aturan ForwardedAtBadIrqlFsdAsync menentukan bahwa panggilan driver IoCallDriver dan PoCallDriver di IRQL<DISPATCH_LEVEL, kecuali kode fungsi utama IRP yang diteruskan adalah salah satu dari berikut ini: |
|
Aturan ForwardedAtBadIrqlFsdSync menentukan bahwa panggilan driver IoCallDriver dan PoCallDriver di IRQL<DISPATCH_LEVEL, kecuali kode fungsi utama IRP yang diteruskan adalah salah satu dari berikut ini: |
|
Aturan IrqlApcLte menentukan bahwa driver memanggil ObGetObjectSecurity dan ObReleaseObjectSecurity hanya ketika dijalankan di IRQL <= APC_LEVEL. |
|
Aturan IrqlDispatch menentukan bahwa driver memanggil DDI berikut hanya ketika dijalankan di IRQL = DISPATCH_LEVEL. |
|
Aturan IrqlExAllocatePool menentukan bahwa driver memanggil ExAllocatePoolWithTag dan ExAllocatePoolWithTagPriority hanya ketika dijalankan di IRQL<=DISPATCH_LEVEL. |
|
Aturan IrqlExApcLte1 menentukan bahwa driver memanggil ExAcquireFastMutex dan ExTryToAcquireFastMutex hanya di IRQL <= APC_LEVEL. |
|
Aturan IrqlExApcLte2 menentukan bahwa driver memanggil rutinitas berikut hanya di IRQL <= APC_LEVEL. |
|
Aturan IrqlExApcLte3 menentukan bahwa driver memanggil rutinitas dukungan eksekutif berikut hanya di IRQL <= APC_LEVEL. |
|
Aturan IrqlExApcLteInline menentukan bahwa DDI hanya dipanggil pada tingkat IRQL yang tepat |
|
Aturan IrqlExFree1 menentukan bahwa ExFreePool dan ExFreePoolWithTag dipanggil pada IRQL yang tepat. |
|
Aturan IrqlExFree2 menentukan bahwa ExFreePool dan ExFreePoolWithTag dipanggil pada IRQL yang tepat. |
|
Aturan IrqlExFree3 menentukan bahwa ExFreePool dan ExFreePoolWithTag dipanggil pada IRQL yang tepat. |
|
Aturan IrqlExPassive menentukan bahwa driver memanggil rutinitas dukungan eksekutif berikut hanya di IRQL = PASSIVE_LEVEL: Aturan IrqlExPassive juga menentukan bahwa driver memanggil ExRaiseStatus di IRQL <= APC_LEVEL |
|
Aturan IrqlIoApcLte menentukan bahwa driver memanggil rutinitas manajer I/O berikut hanya ketika dijalankan di IRQL <= APC_LEVEL: |
|
Aturan IrqlIoDispatch menentukan bahwa driver memanggil rutinitas Manajer I/O berikut hanya ketika dijalankan di IRQL <= DISPATCH_LEVEL: IoGetDeviceToVerify, IoSetDeviceToVerify. |
|
Aturan IrqlIoPassive1 menentukan bahwa driver memanggil rutinitas berikut hanya ketika dijalankan di IRQL = PASSIVE_LEVEL: |
|
Aturan IrqlIoPassive2 menentukan bahwa driver memanggil rutinitas Manajer I/O berikut hanya di IRQL = PASSIVE_LEVEL: |
|
Aturan IrqlIoPassive3 menentukan bahwa driver memanggil rutinitas berikut hanya ketika dijalankan di IRQL = PASSIVE_LEVEL: |
|
Aturan IrqlIoPassive4 menentukan bahwa driver memanggil rutinitas berikut hanya ketika dijalankan di IRQL = PASSIVE_LEVEL: |
|
Aturan IrqlIoPassive5 menentukan bahwa driver memanggil rutinitas I/O Manager tertentu hanya ketika dijalankan di IRQL = PASSIVE_LEVEL. |
|
Aturan IrqlIoRtlZwPassive menentukan bahwa driver memanggil rutinitas I/O Manager tertentu hanya ketika dijalankan di IRQL = PASSIVE_LEVEL. |
|
Aturan IrqlKeApcLte1 menentukan bahwa driver memanggil rutinitas kernel berikut hanya ketika dijalankan di IRQL <= APC_LEVEL: |
|
Aturan IrqlKeApcLte2 menentukan bahwa driver memanggil rutinitas kernel berikut hanya ketika dijalankan di IRQL <= APC_LEVEL: |
|
Aturan IrqlKeDispatchLte menentukan bahwa driver memanggil rutinitas kernel berikut hanya ketika dijalankan di IRQL <= DISPATCH_LEVEL: |
|
Aturan IrqlKeRaiseLower menentukan bahwa driver melakukan hal berikut saat menaikkan dan menurunkan IRQL: Ketika driver memanggil KeRaiseIrql, driver dijalankan pada IRQL yang lebih rendah dari atau sama dengan nilai parameter NewIrql .Driver memanggil KeLowerIrql hanya setelah memanggil KeRaiseIrql atau KeRaiseIrqlToDpcLevel. |
|
Aturan IrqlKeRaiseLower2 menentukan bahwa driver menggunakan KeLowerIrql untuk memulihkan IRQL asli yang dinaikkan oleh panggilan sebelumnya ke KeRaiseIrql atau KeRaiseIrqlToDpcLevel. |
|
Aturan IrqlKeReleaseSpinLock menentukan bahwa driver memanggil KeReleaseSpinLock hanya ketika dijalankan di IRQL = DISPATCH_LEVEL. |
|
Aturan IrqlKeSetEvent menentukan bahwa rutinitas KeSetEvent hanya dipanggil di IRQL <= DISPATCH_LEVEL saat Wait diatur ke FALSE, dan pada IRQL <= APC_LEVEL saat Wait diatur ke TRUE. |
|
Aturan IrqlKeWaitForMutexObject menentukan driver untuk memanggil rutinitas KeWaitForMutexObject di IRQL yang tepat berdasarkan nilai parameter Timeout : |
|
Aturan IrqlKeWaitForMultipleObjects menentukan bahwa pemanggil rutin KeWaitForMultipleObjects harus berjalan pada IRQL yang tepat berdasarkan parameter Timeout . |
|
Aturan IrqlMmApcLte menentukan bahwa driver memanggil rutinitas manajer memori berikut hanya ketika dijalankan di IRQL <= APC_LEVEL: |
|
Aturan IrqlMmDispatch menentukan bahwa driver memanggil MmFreeContiguousMemory hanya ketika dijalankan di IRQL <= DISPATCH_LEVEL. |
|
Aturan IIrqlNtifsApcPassive menentukan bahwa driver memanggil DDI yang tercantum dalam aturan hanya ketika dijalankan baik di IRQL = PASSIVE_LEVEL atau di IRQL <= APC_LEVEL. |
|
Aturan IrqlObPassive menentukan bahwa driver memanggil ObReferenceObjectByHandle hanya ketika dijalankan di IRQL = PASSIVE_LEVEL. |
|
Aturan IrqlPsPassive menentukan bahwa driver memanggil rutinitas Struktur Proses berikut hanya ketika dijalankan di IRQL = PASSIVE_LEVEL: |
|
Aturan IrqlReturn menentukan bahwa rutinitas pengiriman driver kembali pada IRQL yang sama tempat mereka dipanggil. |
|
Aturan IrqlRtlPassive menentukan bahwa driver memanggil RtlDeleteRegistryValue hanya ketika dijalankan di IRQL = PASSIVE_LEVEL. |
|
Aturan IrqlZwPassive menentukan bahwa driver memanggil ZwClose hanya ketika dijalankan di IRQL = PASSIVE_LEVEL. |
Untuk memilih seperangkat aturan Irql
Pilih proyek driver Anda (.vcxProj) di Microsoft Visual Studio. Dari menu Driver , klik Luncurkan Pemverifikasi Driver Statis....
Klik tab Aturan . Di bawah Seperangkat Aturan, pilih Irql.
Untuk memilih seperangkat aturan default dari jendela prompt perintah pengembang Visual Studio, tentukan Irql.sdv dengan opsi /check . Contohnya:
msbuild /t:sdv /p:Inputs="/check:Irql.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat dalam perintah Driver dan Verifier Driver Statis (MSBuild).