锁定规则集 (Storport)

使用这些规则验证驱动程序是否正确管理共享资源。

在本节中

主题 说明

CancelSpinLock

CancelSpinLock 规则 (Storport) 规则验证每次调用 IoAcquireCancelSpinLock 后是否都立即调用 IoReleaseCancelSpinLock

QueuedSpinLock

QueuedSpinLock 规则验证是否使用 KeReleaseInStackQueuedSpinLock 立即释放使用 KeAcquireInStackQueuedSpinLock 获取的堆栈内排队旋转。 此外,在调度结束或取消例程时,驱动程序不应保留任何锁。

QueuedSpinLockRelease

此规则验证驱动程序在未首先通过 KeAcquireInStackQueuedSpinLock 获取锁的情况下,不会调用 KeReleaseInStackQueuedSpinLock

SpinLock

此规则验证是否立即调用 KeAcquireSpinLock ,然后调用 KeReleaseSpinlock。 如果驱动程序在释放锁之前再次调用 KeAcquireSpinLockRaiseToDpcKeAcquireSpinLock ,则会使规则失败。 此外,在退出调度或取消例程之前,驱动程序必须释放自旋锁。

SpinLockDpc

此规则验证是否立即调用 KeAcquireSpinLockRaiseToDpc ,然后调用 KeReleaseSpinlock。 如果驱动程序在释放锁之前再次调用 KeAcquireSpinLockKeAcquireSpinLockRaiseToDpc ,则会使规则失败。 此外,在退出调度或取消例程之前,驱动程序必须释放自旋锁。

SpinLockRelease

此规则验证驱动程序在未首先通过 KeAquireSpinlock 或 KeAcquireSpinLockRaiseToDpc 获取锁的情况下,不会尝试通过 KeReleaseSpinLock 释放锁。 释放获取的旋转锁时,规则会通过。

SpinLockSafe

此规则验证 IoStartNextPacketIoCompleteRequest 例程在持有旋转锁时未调用。 该规则会随时跟踪持有的旋转锁数,如果在调用任一例程时该数目不为 0,则驱动程序会使规则失败。

StorPortMSILock

当并且仅当 PORT_CONFIGURATION_INFORMATION (Storport) 结构的 InterruptSynchronizationMode 成员设置为 InterruptSynchronizePerMessage 时,微型端口驱动程序才需要获取消息的 MSI 旋转锁。 此规则验证是否仅在同步模式为 InterruptSynchronizePerMessage 时调用 StorPortAcquireMSISpinLock

StorPortSpinLock

此规则验证通过 StorPortAcquireSpinLock 获取的锁是否通过 StorPortReleaseSpinLock 立即释放。 如果微型端口驱动程序尝试获取已经获取的锁,或者如果它尝试释放还未获取的锁,则规则将失败。 此外,在调度结束或取消例程时,驱动程序不应保留任何自旋锁。

StorPortSpinLock3

StorPortSpinLock3 规则验证 StorPortAcquireSpinLock 例程的文档中描述的锁获取层次结构。

StorPortSpinLock4

此规则是 StorPortSpinLock发布对应项。 它类似于 SpinLockRelease 规则。

选择锁定规则集

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

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

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

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

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