IrpTracking 规则集 (WDM)
使用这些规则可以验证驱动程序是否正确跟踪 I/O 请求数据包(IRP),以便在 IRP 未完成时不删除设备。
本节内容
主题 | 说明 |
---|---|
IoReleaseRemoveLockAndWaitOutsideRemoveDevice 规则指定不应在具有 PnP 驱动程序IRP_MN_REMOVE_DEVICE IRP_MJ_PNP外部调用 IoReleaseRemoveLockAndWait。 |
|
NsRemoveLockMnRemove 规则验证驱动程序在使用 MinorFunction IRP_MN_REMOVE_DEVICE处理IRP_MJ_PNP时不会返回STATUS_NOT_SUPPORTED。 此规则仅适用于 FDO 和 FIDO 驱动程序。 |
|
NsRemoveLockMnSurpriseRemove 规则验证驱动程序在使用 minorFunction IRP_MN_SUPRI标准版_REMOVAL 处理IRP_MJ_PNP请求时是否不返回STATUS_NOT_SUPPORTED。 此规则仅适用于 FDO 和 FIDO 驱动程序。 |
|
NsRemoveLockQueryMnRemove 规则验证驱动程序在使用 MinorFunction IRP_MN_QUERY_REMOVE 处理IRP_MJ_PNP时不会返回STATUS_NOT_SUPPORTED。 此规则仅适用于 FDO 和 FIDO 驱动程序。 |
|
RemoveLock 规则指定正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 此外,在IRP_MJ_PNP或IRP_MJ_POWER例程结束时,驱动程序不应保留 RemoveLock。 |
|
RemoveLockCheck 规则验证在使用 MinorFunction IRP_MN_REMOVE_DEVICE 处理IRP_MJ_PNP时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 的调用。 |
|
RemoveLockForward 规则验证将 IRP 转发到另一台设备时,是否正确使用了对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForward2 规则验证在将 IRP 转发到另一台设备时正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForwardDeviceControl 规则验证当驱动程序使用 IoCallDriver 将 IRP 转发到另一台设备时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForwardDeviceControl2 规则验证当驱动程序使用 IoCallDriver 将 IRP 转发到另一台设备时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForwardDeviceControlInternal 规则验证在使用 IoCallDriver 将 IRP 转发到另一台设备时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForwardDeviceControlInternal2 规则验证在使用 IoCallDriver 将 IRP 转发到另一台设备时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForwardRead 规则验证正确使用了对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForwardRead2 规则验证在使用 IoCallDriver 将 IRP 转发到另一台设备时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForwardWrite 规则验证在使用 IoCallDriver 将 IRP 转发到另一台设备时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockForwardWrite2 规则验证在使用 IoCallDriver 将 IRP 转发到另一台设备时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 |
|
RemoveLockMnRemove 规则验证在使用 MinorFunction IRP_MN_REMOVE_DEVICE处理IRP_MJ_PNP时,是否正确使用了对 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 的调用。 |
|
RemoveLockMnRemove2 规则验证在 IRP 转发到较低驱动程序之前处理IRP_MN_REMOVE_DEVICE请求时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 的调用。 |
|
RemoveLockMnSurpriseRemove 规则验证在使用 MinorFunction IRP_MN_SUPRI标准版_REMOVAL 处理IRP_MJ_PNP时,是否正确使用了对 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 的调用。 驱动程序应在将 IRP 转发到堆栈之前获取删除锁。 |
|
RemoveLockQueryMnRemove 规则验证在使用 MinorFunction IRP_MN_QUERY_REMOVE_DEVICE处理IRP_MJ_PNP时,正确使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 驱动程序应在将 IRP 转发到堆栈之前获取删除锁。 |
|
规则 RemoveLockRelease2 验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleaseCleanup 规则指定在严格交替中使用对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用。 每次对 IoAcquireRemoveLock 的调用都必须具有对 IoReleaseRemoveLock 的匹配调用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
规则 RemoveLockReleaseClose 验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleaseCreate 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleaseDeviceControl 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleaseInternalDeviceControl 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleasePnp 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleasePower 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleaseRead 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleaseShutdown 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleaseSystemControl 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
|
RemoveLockReleaseWrite 规则验证对 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的调用是否在严格交替中使用。 此外,在调度例程结束时,驱动程序不应保留删除锁。 |
选择 IrpTracking 规则集
在 Microsoft Visual Studio 中选择驱动程序项目(.vcxProj)。 在 “驱动程序 ”菜单中,单击“ 启动静态驱动程序验证程序...”。
单击“规则”选项卡。在“规则集”下,选择“IrpTracking”。
若要从 Visual Studio 开发人员命令提示符窗口中选择默认规则集,请使用 /检查 选项指定 IrpTracking.sdv。 例如:
msbuild /t:sdv /p:Inputs="/check:IrpTracking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
有关详细信息,请参阅使用静态驱动程序验证程序查找驱动程序和静态驱动程序验证程序命令中的缺陷(MSBuild)。