IrpPending 规则集 (WDM)
使用这些规则验证驱动程序是否正确将 I/O 请求数据包 (IRP) 。
在本节中
主题 | 说明 |
---|---|
MarkDevicePower 规则指定将IRP_MN_SET_POWER的 SystemPowerState IRP 设置为 S0 的IRP_MJ_POWER。 |
|
MarkingInterlockedQueuedIrps 规则指定驱动程序在以互锁方式将 IRP 排队以供进一步处理之前,正确将 IRP 标记为挂起。 |
|
MarkQueuedIrps 规则指定驱动程序为 IRP 调用 IoMarkIrpPending,该 IRP 仅在持有旋转锁时需要进一步处理。 仅当驱动程序将 IRP 添加到驱动程序管理的队列时,此规则才适用。 |
|
MarkIrpPending 规则指定每当驱动程序调度例程调用 IoMarkIrpPending 时,驱动程序在调度例程结束时返回STATUS_PENDING。 有关免费规范,请参阅 MarkIrpPending2 。 |
|
MarkIrpPending2 规则指定,如果调度例程返回STATUS_PENDING,它已调用 IoMarkIrpPending 或将 IRP 传递给较低的驱动程序。 有关免费规范,请参阅 MarkIrpPending 。 |
|
MarkPower 规则指定将IRP_MN_SET_POWER设置为 S0 的 SystemPowerState IRP 的IRP_MJ_POWER。 此规则仅适用于 FDO 和 FIDO 驱动程序。 |
|
MarkPowerDown 规则 IRP_MJ_POWER指定 systemPowerState IRP 的IRP_MN_SET_POWER从 s0 到 [S1...S5] 已吊坠。 |
|
MarkQueryRelations 规则指定驱动程序应IRP_MN_QUERY_DEVICE_RELATIONS IRP。 |
|
MarkStartDevice 规则指定驱动程序正确IRP_MN_START_DEVICE IRP。 此规则仅适用于 FDO 和 FIDO 驱动程序。 |
|
PendedCompletedRequest 规则指定,如果驱动程序在传入 IRP 上调用了 IoCompleteRequest,则驱动程序的调度例程不会在 IRP 上返回STATUS_PENDING。 |
|
PendedCompletedRequest2 规则指定在调用 IoCallDriver 或 PoCallDriver 后需要等待,因为调度例程可以完成挂起的 IRP。 |
|
PendedCompletedRequest3 规则指定挂起的 IRP 不应通过调用 IoCompleteRequest 来完成。 |
|
PendedCompletedRequestEx 规则指定驱动程序不应为挂起的 IRP 调用 IoCompleteRequest。 |
|
StartDeviceWait 规则指定驱动程序不应在启动设备 IRP 的上下文中调用 KeWaitForSingleObject。 |
|
StartDeviceWait2 规则指定驱动程序不应在启动设备 IRP 的上下文中调用 KeWaitForSingleObject。 |
|
StartDeviceWait3 规则指定驱动程序不应在启动设备 IRP 的上下文中调用 KeWaitForSingleObject。 |
|
StartDeviceWait4 规则指定驱动程序不应在启动设备 IRP 的上下文中调用 KeWaitForSingleObject。 |
选择 IrpPending 规则集
在 Microsoft Visual Studio 中选择驱动程序项目 (.vcxProj) 。 在“ 驱动程序 ”菜单中,单击“ 启动静态驱动程序验证程序...”。
单击“ 规则 ”选项卡。在 “规则集”下,选择“ IrpPending”。
若要从 Visual Studio 开发人员命令提示符窗口中选择默认规则集,请使用 /检查 选项指定 IrpPending.sdv。 例如:
msbuild /t:sdv /p:Inputs="/check:IrpPending.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
有关详细信息,请参阅 使用静态驱动程序验证程序查找驱动程序中的缺陷 和 静态驱动程序验证程序命令 (MSBuild) 。