锁定规则集 (KMDF)

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

在本节中

主题 说明

ParentObjectCheckLock

ParentObjectCheckLock 规则指定驱动程序应调用 WdfWaitLockCreateWdfSpinLockCreate 设置父对象。

ReqSendWhileSpinlock

ReqSendWhileSpinlock 规则指定在驱动程序持有旋转锁时不发送任何请求。

Spinlock

Spinlock 规则指定对 KeAcquireSpinLockKeAcquireSpinLockRaiseToDpcKeReleaseSpinlock 的调用在严格交替中使用。

SpinlockDpc

SpinlockDpc 规则指定在严格替换中使用对 KeAcquireSpinLockKeAcquireSpinLockRaiseToDpcKeReleaseSpinlock 的调用。

SpinlockRelease

SpinlockRelease 规则指定在 KMDF 回调中以均衡的方式使用对 KeAcquireSpinLockKeAcquireSpinLockRaiseToDpcKeReleaseSpinLock 的调用。 在任何 KMDF 回调例程结束时,驱动程序不应持有旋转锁。

WdfInterruptLock

WdfInterruptLock 规则指定对 WdfInterruptAcquireLock 方法的调用与对 WdfInterruptReleaseLock 的调用严格交替使用。 此外,在任何 KMDF 回调例程结束时,驱动程序不应持有由先前调用 WdfInterruptAcquireLock 获取的框架旋转锁对象。

WdfInterruptLockRelease

WdfInterruptLockRelease 规则指定在 KMDF 回调例程中以均衡的方式使用对 WdfInterruptAcquireLockWdfInterruptReleaseLock 的调用。 在任何 KMDF 回调例程结束时,驱动程序不应保存以前调用 WdfInterruptAcquireLock 获取的框架旋转锁对象。

WdfSpinlock

WdfSpinlock 规则指定对 WdfSpinLockAcquire 方法的调用与 WdfSpinlockRelease 严格交替使用。 在任何 KMDF 回调例程结束时,驱动程序不应保存以前调用 WdfSpinLockAcquire 获取的框架 spinlock 对象。

WdfSpinlockRelease

WdfSpinlockRelease 规则指定在 KMDF 事件回调函数中以均衡的方式使用对 WdfSpinLockAcquireWdfSpinlockRelease 的调用。 当 KMDF 事件回调函数返回时,驱动程序不应持有以前调用 WdfSpinLockAcquire 获取的框架旋转锁对象。

WdfWaitlock

WdfWaitlock 规则指定对 WdfWaitLockAcquire 的调用与 WdfWaitlockRelease 严格交替使用。 当 KMDF 事件回调函数返回时,驱动程序不应持有以前调用 WdfWaitLockAcquire 获取的框架旋转锁对象。

WdfWaitlockRelease

WdfWaitlockRelease 规则指定在 KMDF 事件回调函数中以均衡的方式使用对 WdfWaitLockAcquireWdfWaitLockRelease 的调用。 当 KMDF 事件回调函数返回时,驱动程序不应持有以前调用 WdfWaitLockAcquire 获取的框架旋转锁对象。

选择锁定规则集

  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)