LocalIrpProcessing 规则集 (WDM)

使用这些规则验证驱动程序是否正确处理由驱动程序创建的 I/O 请求数据包 (IRP) 。

在本节中

主题 说明

IoAllocateComplete

IoAllocateComplete 规则指定如果 IRP 是使用 IoAllocateIrp 创建的,则驱动程序不应调用 IoCompleteRequest

IoAllocateFree

IoAllocateFree 规则指定驱动程序应仅在以前使用 IoAllocateIrp 分配的 IRP 上使用 IoFreeIrp

IoAllocateForward

IoAllocateForward 规则指定,如果 IRP 是通过调用 IoAllocateIrp 生成的,则驱动程序必须在调用 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

IoBuildDeviceControlWait 规则指定在 IoCallDriver 或 PoCallDriver 返回STATUS_PENDING时应调用 KeWaitForSingleObject 例程。

IoBuildDeviceControlWaitTimeout

如果 IoBuildDeviceControlWaitTimeout 规则检测到此驱动程序将无限期等待,直到较低的驱动程序返回,则它会报告缺陷,因为需要在完成例程中向 IRP 的事件发出信号。

IoBuildDeviceIoControlSetEvent

IoBuildDeviceIoControlSetEvent 规则指定,如果驱动程序提供指向调用方分配和初始化的事件对象的指针,则调用 IoBuildDeviceIoControlRequest 的驱动程序不得调用 KeSetEvent。 驱动程序不需要为此 IRP 调用 KeSetEvent

IoBuildFsdComplete

IoBuildFsdComplete 规则指定如果 IRP 是使用 IoBuildAsynchronousFsdRequest 创建的,则驱动程序不应调用 IoCompleteRequest

IoBuildFsdForward

IoBuildFsdForward 规则指定,如果 IRP 是通过对 IoBuildAsynchronousFsdRequest 的调用生成的,则必须在驱动程序调用 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 规则指定在 IoCallDriver 或 PoCallDriver 返回STATUS_PENDING的情况下应调用 KeWaitForSingleObject

IoBuildSynchronousFsdRequestWaitTimeout

如果 IoBuildSynchronousFsdRequestWaitTimeout 规则检测到此驱动程序将无限期地等待,直到较低的驱动程序返回,则它会报告缺陷,因为需要在完成例程中向 IRP 的事件发出信号。

RequestedPowerIrp

RequestedPowerIrp 规则指定驱动程序调用 PoRequestPowerIrp,并将*Irp指针变量设置为 NULL

选择 LocalIrpProcessing 规则集

  1. 在 Microsoft Visual Studio 中选择驱动程序项目 (.vcxProj) 。 在“ 驱动程序 ”菜单中,单击“ 启动静态驱动程序验证程序...”

  2. 单击“ 规则 ”选项卡。在 “规则集”下,选择“ LocalIrpProcessing”。

    若要从 Visual Studio 开发人员命令提示符窗口中选择默认规则集,请使用 /检查 选项指定 LocalIrpProcessing.sdv。 例如:

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

    有关详细信息,请参阅 使用静态驱动程序验证程序查找驱动程序中的缺陷静态驱动程序验证程序命令 (MSBuild)