共用方式為


WDM (IRQL 規則集)

使用這些規則來確認您的驅動程式在必要的 IRQL 進行 DDI 呼叫。

未遵循 IRQL 規則的驅動程式可能會導致作業期間發生嚴重問題,導致死結狀況或電腦當機。

本節內容

主題 描述

ForwardedAtBadIrql

ForwardedAtBadIrql 規則指定驅動程式應該在 IRQL<呼叫 IoCallDriverPoCallDriver DISPATCH_LEVEL,除非轉送的 IRP 主要函式程式代碼是下列其中一項:

ForwardedAtBadIrqlAllocate

ForwardedAtBadIrqlAllocate 規則指定驅動程式應該在 IRQL<DISPATCH_LEVEL呼叫 IoCallDriverPoCallDriver,除非轉送的 IRP 主要函式程式代碼是下列其中一項:

ForwardedAtBadIrqlFsdAsync

ForwardedAtBadIrqlFsdAsync 規則會指定驅動程式在 IRQL<DISPATCH_LEVEL呼叫 IoCallDriverPoCallDriver,除非正在轉送的 IRP 主要函式程式代碼是下列其中一項:

ForwardedAtBadIrqlFsdSync

ForwardedAtBadIrqlFsdSync 規則會指定驅動程式在 IRQL<DISPATCH_LEVEL呼叫 IoCallDriverPoCallDriver,除非轉送的 IRP 主要函式程式代碼是下列其中一項:

IrqlApcLte

IrqlApcLte 規則指定驅動程式只有在 IRQL <= APC_LEVEL執行時,才會呼叫 ObGetObjectSecurityObReleaseObjectSecurity

IrqlDispatch

IrqlDispatch 規則會指定只有在驅動程式在 IRQL = DISPATCH_LEVEL執行時,才會呼叫下列 DIS。

IrqlExAllocatePool

IrqlExAllocatePool 規則指定驅動程式只有在 IRQL<=DISPATCH_LEVEL執行時,才會呼叫 ExAllocatePoolWithTagWithTagWithPoolWithTagPriority

IrqlExApcLte1

IrqlExApcLte1 規則指定驅動程式只在 IRQL <= APC_LEVEL呼叫 ExAcquireFastMutexExTryToAcquireFastMutex

IrqlExApcLte2

IrqlExApcLte2 規則指定驅動程式只會在 IRQL <= APC_LEVEL呼叫下列例程。

IrqlExApcLte3

IrqlExApcLte3 規則指定驅動程式只會在 IRQL <= APC_LEVEL呼叫下列主管支援例程。

IrqlExApcLteInline

IrqlExApcLteInline 規則指定只有在適當的 IRQL 層級上呼叫 DDI

IrqlExFree1

IrqlExFree1 規則會指定在適當的 IRQL 呼叫 ExFreePool 和 ExFreePoolWithTag

IrqlExFree2

IrqlExFree2 規則會指定在適當的 IRQL 呼叫 ExFreePool 和 ExFreePoolWithTag

IrqlExFree3

IrqlExFree3 規則會指定在適當的 IRQL 呼叫 ExFreePool 和 ExFreePoolWithTag

IrqlExPassive

IrqlExPassive 規則指定驅動程式只會在 IRQL = PASSIVE_LEVEL呼叫下列主管支援例程:

IrqlExPassive 規則也會指定驅動程式在 IRQL <= APC_LEVEL

IrqlIoApcLte

IrqlIoApcLte 規則指定驅動程式只在 IRQL <= APC_LEVEL執行時,才會呼叫下列 I/O 管理員例程:

IrqlIoDispatch

IrqlIoDispatch 規則指定驅動程式只有在 IRQL <= DISPATCH_LEVEL執行時,驅動程式才會呼叫下列 I/O 管理員例程:IoGetDeviceToVerifyIoSetDeviceToVerify

IrqlIoPassive1

IrqlIoPassive1 規則會指定只有在驅動程式在 IRQL = PASSIVE_LEVEL執行時,才會呼叫下列例程:

IrqlIoPassive2

IrqlIoPassive2 規則指定驅動程式只在 IRQL = PASSIVE_LEVEL呼叫下列 I/O 管理員例程:

IrqlIoPassive3

IrqlIoPassive3 規則會指定只有在驅動程式在 IRQL = PASSIVE_LEVEL執行時,才會呼叫下列例程:

IrqlIoPassive4

IrqlIoPassive4 規則指定驅動程式只在 IRQL = PASSIVE_LEVEL執行時,才會呼叫下列例程:

IrqlIoPassive5

IrqlIoPassive5 規則指定只有在驅動程式在 IRQL = PASSIVE_LEVEL執行時,才會呼叫特定的 I/O 管理員例程。

IrqlIoRtlZwPassive

IrqlIoRtlZwPassive 規則指定驅動程式只在 IRQL = PASSIVE_LEVEL執行時,才會呼叫特定的 I/O 管理員例程。

IrqlKeApcLte1

IrqlKeApcLte1 規則指定只有在驅動程式在 IRQL <= APC_LEVEL執行時,才會呼叫下列核心例程:

IrqlKeApcLte2

IrqlKeApcLte2 規則指定只有在驅動程式在 IRQL <= APC_LEVEL執行時,才會呼叫下列核心例程:

IrqlKeDispatchLte

IrqlKeDispatchLte 規則指定只有在驅動程式在 IRQL <= DISPATCH_LEVEL執行時,才會呼叫下列核心例程:

IrqlKeRaiseLower

IrqlKeRaiseLower 規則會指定驅動程式在引發和降低 IRQL 時執行下列動作:

當驅動程式呼叫 KeRaiseIrql 時,它會在小於或等於 NewIrql 參數值的 IRQL 上執行。
驅動程式只會在呼叫 KeRaiseIrqlKeRaiseIrqlToDpcLevel 之後呼叫 KeLowerIrql

IrqlKeRaiseLower2

IrqlKeRaiseLower2 規則會指定驅動程式使用 KeLowerIrql 還原先前呼叫 KeRaiseIrqlKeRaiseIrqlToDpcLevel 所引發的原始 IRQL。

IrqlKeReleaseSpinLock

IrqlKeReleaseSpinLock 規則指定驅動程式只在 IRQL = DISPATCH_LEVEL執行時呼叫 KeReleaseSpinLock

IrqlKeSetEvent

IrqlKeSetEvent 規則指定 KeSetEvent 例程只有在 IRQL<= DISPATCH_LEVEL設定為 FALSE 時呼叫 KeSetEvent 例程,而當 Wait 設定為 TRUE 時,在 IRQL <= APC_LEVEL。

IrqlKeWaitForMutexObject

IrqlKeWaitForMutexObject 規則會根據 Timeout 參數的值,指定在適當的 IRQL 上呼叫 KeWaitForMutexObject 例程的驅動程式:

IrqlKeWaitForMultipleObjects

IrqlKeWaitForMultipleObjects 規則指定 KeWaitForMultipleObjects 例程的呼叫端必須根據 Timeout 參數在適當的 IRQL 上執行。

IrqlMmApcLte

IrqlMmApcLte 規則指定驅動程式只在 IRQL <= APC_LEVEL執行時,才會呼叫下列記憶體管理員例程:

IrqlMmDispatch

IrqlMmDispatch 規則指定驅動程式只在 IRQL <= DISPATCH_LEVEL執行時,才會呼叫 MmFreeContiguousMemory

IrqlNtifsApcPassive

IIrqlNtifsApcPassive 規則指定只有在驅動程式在 IRQL = PASSIVE_LEVEL或 IRQL <= APC_LEVEL 執行時,驅動程式才會呼叫規則中列出的 DIS。

IrqlObPassive

IrqlObPassive 規則指定驅動程式只在 IRQL = PASSIVE_LEVEL執行時呼叫 ObReferenceObjectByHandle

IrqlPsPassive

IrqlPsPassive 規則指定只有在驅動程式在 IRQL = PASSIVE_LEVEL執行時,才會呼叫下列進程結構例程

IrqlReturn

IrqlReturn 規則會指定驅動程式的分派例程會在呼叫它們所在的相同 IRQL 傳回。

IrqlRtlPassive

IrqlRtlPassive 規則指定驅動程式只在 IRQL = PASSIVE_LEVEL執行時呼叫 RtlDeleteRegistryValue

IrqlZwPassive

IrqlZwPassive 規則指定驅動程式只在 IRQL = PASSIVE_LEVEL執行時呼叫 ZwClose

若要選取 Irql 規則集

  1. 在 Microsoft Visual Studio 中選取驅動程式項目 (.vcxProj) 。 從 [ 驅動程式 ] 功能表中,按兩下 [ 啟動靜態驅動程序驗證程式...]。

  2. 按兩下 [ 規則] 索引標籤 。在 [規則集] 底下,選取 [Irql]。

    若要從 Visual Studio 開發人員命令提示字元視窗中選取預設規則集,請使用 /check 選項指定 Irql.sdv。 例如:

    msbuild /t:sdv /p:Inputs="/check:Irql.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    如需詳細資訊,請參閱 使用靜態驅動程式驗證器在驅動程式靜態驅動程式驗證器命令 中尋找瑕疵 (MSBuild) 。