锁定规则集 (Storport)
使用这些规则验证驱动程序是否正确管理共享资源。
在本节中
主题 | 说明 |
---|---|
CancelSpinLock 规则 (Storport) 规则验证每次调用 IoAcquireCancelSpinLock 后是否都立即调用 IoReleaseCancelSpinLock。 |
|
QueuedSpinLock 规则验证是否使用 KeReleaseInStackQueuedSpinLock 立即释放使用 KeAcquireInStackQueuedSpinLock 获取的堆栈内排队旋转锁。 此外,在调度结束或取消例程时,驱动程序不应保留任何锁。 |
|
此规则验证驱动程序在未首先通过 KeAcquireInStackQueuedSpinLock 获取锁的情况下,不会调用 KeReleaseInStackQueuedSpinLock。 |
|
此规则验证是否立即调用 KeAcquireSpinLock ,然后调用 KeReleaseSpinlock。 如果驱动程序在释放锁之前再次调用 KeAcquireSpinLockRaiseToDpc 或 KeAcquireSpinLock ,则会使规则失败。 此外,在退出调度或取消例程之前,驱动程序必须释放自旋锁。 |
|
此规则验证是否立即调用 KeAcquireSpinLockRaiseToDpc ,然后调用 KeReleaseSpinlock。 如果驱动程序在释放锁之前再次调用 KeAcquireSpinLock 或 KeAcquireSpinLockRaiseToDpc ,则会使规则失败。 此外,在退出调度或取消例程之前,驱动程序必须释放自旋锁。 |
|
此规则验证驱动程序在未首先通过 KeAquireSpinlock 或 KeAcquireSpinLockRaiseToDpc 获取锁的情况下,不会尝试通过 KeReleaseSpinLock 释放锁。 释放获取的旋转锁时,规则会通过。 |
|
此规则验证 IoStartNextPacket 和 IoCompleteRequest 例程在持有旋转锁时未调用。 该规则会随时跟踪持有的旋转锁数,如果在调用任一例程时该数目不为 0,则驱动程序会使规则失败。 |
|
当并且仅当 PORT_CONFIGURATION_INFORMATION (Storport) 结构的 InterruptSynchronizationMode 成员设置为 InterruptSynchronizePerMessage 时,微型端口驱动程序才需要获取消息的 MSI 旋转锁。 此规则验证是否仅在同步模式为 InterruptSynchronizePerMessage 时调用 StorPortAcquireMSISpinLock。 |
|
此规则验证通过 StorPortAcquireSpinLock 获取的锁是否通过 StorPortReleaseSpinLock 立即释放。 如果微型端口驱动程序尝试获取已经获取的锁,或者如果它尝试释放还未获取的锁,则规则将失败。 此外,在调度结束或取消例程时,驱动程序不应保留任何自旋锁。 |
|
StorPortSpinLock3 规则验证 StorPortAcquireSpinLock 例程的文档中描述的锁获取层次结构。 |
|
此规则是 StorPortSpinLock 的发布对应项。 它类似于 SpinLockRelease 规则。 |
选择锁定规则集
在 Microsoft Visual Studio 中选择驱动程序项目 (.vcxProj) 。 在“ 驱动程序 ”菜单中,单击“ 启动静态驱动程序验证程序...”。
单击“ 规则 ”选项卡。在 “规则集”下,选择“ 锁定”。
若要从 Visual Studio 开发人员命令提示符窗口中选择默认规则集,请使用 /检查 选项指定 Locking.sdv。 例如:
msbuild /t:sdv /p:Inputs="/check:Locking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
有关详细信息,请参阅 使用静态驱动程序验证程序查找驱动程序中的缺陷 和 静态驱动程序验证程序命令 (MSBuild) 。