DDI 用法规则集 (WDM)

使用这些规则验证驱动程序是否正确使用 WDM DDI。

在本节中

主题 说明

DebugBreakUsage

DebugBreakUsage 规则指定驱动程序不得调用 DbgBreakPointDbgBreakPointWithStatus。 此规则仅在生成非调试版本的驱动程序时适用。

DoubleFetch

DoubleFetch 规则检查用户模式内存指针的双重提取。 用户模式内存的双重内核模式访问可能会导致争用条件安全问题。 访问用户模式数据时,内核模式代码需要在本地复制用户模式数据,并避免多次访问用户模式数据。 否则会导致一种称为“双重提取”的问题,其中数据在首次访问后可能会更改。

NullCheck

NullCheck 规则验证驱动程序代码中的 NULL 值稍后不会在驱动程序中取消引用。 如果满足以下任一条件,则此规则将报告缺陷:

  • 有一个 NULL 的分配,稍后会取消引用。
  • 驱动程序中某个过程的全局/参数可能为 NULL,稍后将取消引用,驱动程序中有一个显式检查,建议指针的初始值可能为 NULL。

如果存在 NullCheck 规则冲突,则跟踪树窗格中突出显示了最相关的代码语句。 有关使用报表输出的详细信息,请参阅 静态驱动程序验证程序报表了解跟踪查看器

SafeStrings

SafeStrings 规则指定驱动程序仅调用那些保护系统免受意外或恶意入侵的字符串操作函数。 这些用于驱动程序的安全字符串函数在 Ntstrsafe.h 中定义。

ObsoleteDDIs

ObsoleteDDI 规则指定驱动程序不应调用 FsRtlPrivateLock。 此函数已过时。 请改用 FsRtlFastLock

选择 DDI 使用规则集

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

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

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

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

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