共用方式為


IRQL 規則集 (WDM)

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

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

本節中

主題 說明

ForwardedAtBadIrql

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

ForwardedAtBadIrqlAllocate

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

ForwardedAtBadIrqlFsdAsync

ForwardedAtBadIrqlFsdAsync 規則指定驅動程式應在 IRQLDISPATCH_LEVEL 呼叫 IoCallDriver 和 <,除非要轉送的 IRP 主要功能代碼是以下其中之一:

ForwardedAtBadIrqlFsdSync

ForwardedAtBadIrqlFsdSync 規則要求驅動程式在 IRQLDISPATCH_LEVEL 呼叫 IoCallDriver 和 <,除非被轉送的 IRP 主要功能程式代碼是下列其中之一:

IrqlApcLte

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

IrqlDispatch

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

IrqlExAllocatePool

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

IrqlExApcLte1

IrqlExApcLte1 規則指定驅動程式只會在 IRQL = APC_LEVEL 呼叫 ExAcquireFastMutex 和 <。

IrqlExApcLte2

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

IrqlExApcLte3

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

IrqlExApcLteInline

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

IrqlExFree1

IrqlExFree1 規則指定在適當的 IRQL 呼叫 ExFreePoolExFreePoolWithTag

IrqlExFree2

IrqlExFree2 規則指定在適當的 IRQL 呼叫 ExFreePoolExFreePoolWithTag

IrqlExFree3

IrqlExFree3 規則規定必須在適當的 IRQL 上呼叫ExFreePoolExFreePoolWithTag

IrqlExPassive

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

IrqlExPassive 規則還會指定驅動程式在 IRQL = APC_LEVEL 時呼叫 <。

IrqlIoApcLte

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

IrqlIoDispatch

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

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當 Wait 設定為 FALSE 時呼叫,而當 < 設定為 TRUE 時,在 IRQL = APC_LEVEL。

IrqlKeWaitForMutexObject

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

IrqlKeWaitForMultipleObjects

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

IrqlMmApcLte

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

IrqlMmDispatch

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

IrqlNtifsApcPassive

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

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. 在 Visual Studio Microsoft中選取您的驅動程式專案 (.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)