共用方式為


LocalIrpProcessing 規則集 (WDM)

使用這些規則來確認您的驅動程序正確處理驅動程式所建立的 I/O 要求封包 (IRP) 。

本節內容

主題 描述

IoAllocateComplete

IoAllocateComplete 規則指定如果 IRP 是使用 IoAllocateIrp 建立的,驅動程式不應該呼叫 IoCompleteRequest

IoAllocateFree

IoAllocateFree 規則指定驅動程式應該只在先前使用 IoAllocateIrp 配置的 IRP 上使用 IoFreeIrp

IoAllocateForward

IoAllocateForward 規則會指定如果呼叫 IoAllocateIrp 產生 IRP,驅動程式必須先設定完成例程,才能呼叫 IoCallDriverPoCallDriver

IoAllocateIrpSignalEventInCompletion

IoAllocateIrpSignalEventInCompletion 規則會指定當設定 Irp-PendingReturned> 旗標且完成例程正在處理本機建立的異步 IRP 時,驅動程式應該在完成例程中呼叫 KeSetEvent

IoAllocateIrpSignalEventInCompletion2

IoAllocateIrpSignalEventInCompletion2 規則指定當設定 Irp-PendingReturned> 旗標且完成例程正在處理本機建立的異步 IRP 時,必須在完成例程中呼叫 KeSetEvent

IoAllocateIrpSignalEventInCompletion3

IoAllocateIrpSignalEventInCompletion3 規則指定當設定 Irp-PendingReturned> 旗標且完成例程正在處理本機建立的異步 IRP 時,必須在完成例程中呼叫 KeSetEvent

IoAllocateIrpSignalEventInCompletionTimeout

如果 IoAllocateIrpSignalEventInCompletionTimeout 規則偵測到此驅動程式會無限期地等候,直到下層驅動程式傳回為止,因為 IRP 的事件必須在完成例程中發出訊號時發出訊號。

IoBuildDeviceControlNoFree

IoBuildDeviceControlNoFree 規則指定呼叫 IoBuildDeviceIoControlRequest 的驅動程式不得呼叫 IoFreeIrp

IoBuildDeviceControlWait

如果 IoCallDriver 或 PoCallDriver 傳回STATUS_PENDING,IoBuildDeviceControlWait 規則會指定 KeWaitForSingleObject 例程應該呼叫。

IoBuildDeviceControlWaitTimeout

如果 IoBuildDeviceControlWaitTimeout 規則偵測到此驅動程式會無限期地等候,直到較低的驅動程式傳回為止,因為 IRP 的事件必須在完成例程中發出訊號時回報瑕疵。

IoBuildDeviceIoControlSetEvent

IoBuildDeviceIoControlSetEvent 規則指定如果驅動程式提供呼叫呼叫端配置和初始化事件物件的指標,則呼叫 IoBuildDeviceIoControlRequest 的驅動程式不得呼叫 KeSetEvent。 此 IRP 驅動程式不需要呼叫 KeSetEvent

IoBuildFsdComplete

如果 IRP 是以 IoBuildAsynchronousFsdRequest 建立,IoBuildFsdCompleteCompleteCompleteRequest 規則會指定驅動程序不應該呼叫 IoCompleteRequest

IoBuildFsdForward

如果 IoBuildAsynchronousFsdRequest 呼叫 IoCallDriver 或 PoCallDriver,IoBuildFsdForward 規則會指定必須在驅動程式呼叫 IoCallDriverPoCallDriver 之前設定完成例程。

IoBuildFsdFree

IoBuildFsdFree 規則指定驅動程序應該只在先前以 IoBuildAsynchronousFsdRequest 配置的 IRP 上使用 IoFreeIrp

IoBuildFsdIrpSignalEventInCompletion

IoBuildFsdIrpSignalEventInCompletion 規則指定當設定 Irp-PendingReturned> 旗標且完成例程正在處理本機建立的異步 IRP 時,驅動程式應該在完成例程中呼叫 KeSetEvent

IoBuildFsdIrpSignalEventInCompletion2

IoBuildFsdIrpSignalEventInCompletion2 規則指定當設定 Irp-PendingReturned> 旗標且完成例程正在處理本機建立的異步 IRP 時,必須在完成例程中呼叫 KeSetEvent

IoBuildFsdIrpSignalEventInCompletion3

IoBuildFsdIrpSignalEventInCompletion3 規則指定當設定 Irp-PendingReturned> 旗標且完成例程正在處理本機建立的異步 IRP 時,必須在完成例程中呼叫 KeSetEvent

IoBuildFsdIrpSignalEventInCompletionTimeout

IoBuildFsdIrpSignalEventInCompletionTimeout 規則會在驅動程序無限期等候直到下層驅動程式傳回時回報瑕疵,因為 IRP 的事件必須在完成例程中發出訊號。

IoBuildSynchronousFsdRequestNoFree

IoBuildSynchronousFsdRequestNoFree 規則指定呼叫 IoBuildSynchronousFsdRequest 的驅動程式不得呼叫 IoFreeIrp

IoBuildSynchronousFsdRequestWait

IoBuildSynchronousFsdRequestWait 規則指定在 IoCallDriverPoCallDriver 傳回STATUS_PENDING的情況下,應該呼叫 KeWaitForSingleObject

IoBuildSynchronousFsdRequestWaitTimeout

如果 IoBuildSynchronousFsdRequestWaitTimeout 規則偵測到此驅動程式會無限期地等候,直到下層驅動程式傳回為止,因為 IRP 的事件必須在完成例程中發出訊號。

RequestedPowerIrp

RequestedPowerIrp 規則會指定驅動程式呼叫 PoRequestPowerIrp*Irp並將指標變數設定為 NULL

選取 LocalIrpProcessing 規則集

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

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

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

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

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