静态驱动程序验证程序命令 (MSBuild)
可以通过安装 Windows 驱动程序工具包(WDK)或运行企业 Windows 驱动程序工具包(EWDK)在 Visual Studio 命令提示符 窗口中运行静态驱动程序验证程序(SDV)。 导航到存储驱动程序的项目文件或库的项目文件的目录。 参数可以按命令行的任何顺序显示。
重要
不再支持 SDV,并且 Windows 24H2 WDK 或 EWDK 版本中不提供 SDV。 它在版本 26017 之前的 WDK 中不可用,并且不包括在 Windows 24H2 RTM WDK 中。
通过从 下载 Windows 驱动程序工具包(WDK)下载 Windows 11 版本 22H2 EWDK(2023 年 10 月 24 日发布)和 Visual Studio 生成工具 17.1.5,仍可使用 SDV。 建议仅使用企业 WDK 运行 SDV。 不建议将旧版标准 WDK 与 Visual Studio 的最新版本结合使用,因为这可能会导致分析失败。
今后,CodeQL 将成为驱动程序的主要静态分析工具。 CodeQL 提供了一种功能强大的查询语言,可将代码视为要查询的数据库,使编写特定行为、模式等查询变得简单。
有关使用 CodeQL 的详细信息,请参阅 CodeQL 和静态工具徽标测试。
msbuild /t:sdv /p:Inputs="Parameters" ProjectFile /p:Configuration=configuration /p:Platform=platform
必须选择发布配置(例如 /p:Configuration=“Windows 7 版本”)。 有关支持的发布配置列表,请参阅 生成驱动程序。 平台可以是 Win32 (对于 x86)或 x64 (例如 /p:Platform=Win32)。
注意
请务必检查计算机的电源管理计划,以确保计算机在分析期间不会进入睡眠状态。
参数
/scan
扫描驱动程序的源代码以获取函数角色类型声明。 有关如何声明驱动程序提供的回调函数和调度例程的信息,请参阅 “使用函数角色类型声明”。 在此扫描期间,SDV 会尝试检测驱动程序需要验证驱动程序的驱动程序入口点。 它在 Sdv-map.h 中记录扫描的结果,该文件是在驱动程序的项目目录中创建的。
有关详细信息,请参阅 准备源代码。
/check:Rule | Rule,...
使用指定的规则启动验证。 可以通过用逗号分隔每个规则来指定多个规则。 运行 /check: 命令并指定驱动程序的 Visual Studio 项目文件(*.vcxproj)。
规则 是一个 规则 的名称或一个规则名称模式,其中包含通配符 \ 表示一个或多个字符。 单独使用时,通配符 \ 表示所有规则。
/check:RuleList.sdv
使用指定规则列表文件中的规则启动验证。 只能列出具有此参数的一个文件。 在规则列表文件中,每行可以是一个规则的名称,也可以是一个通配符 {,表示所有 SDV 规则。 运行 /check:RuleList.sdv 命令并指定驱动程序的 Visual Studio 项目文件(*.vcxproj)。
RuleList.sdv 是规则列表文件的完全限定路径和文件名。 该文件必须具有 .sdv 文件扩展名。 除非文件位于本地目录中,否则路径是必需的。 如果路径或文件名包含空格,则必须将 RuleList 括起来 。引号中的 sdv 。
如果指定 /check: 选项而不指定规则,则 SDV 使用驱动程序模型的默认规则集运行。
/lib
处理当前目录中的库。 SDV 调用MSBuild.exe来编译和生成库以供外部使用,并生成需要将库包含在驱动程序验证中的文件。
在验证需要库的驱动程序之前,请使用此参数。 运行 msbuild /t:sdv /p:Inputs=“/lib” 命令,并为库指定 Visual Studio 项目文件(*.vcxproj)。
有关 /lib 参数的使用和效果的详细信息,请参阅静态驱动程序验证程序中的库处理。
/视图
打开静态驱动程序验证程序。 运行 /view 命令并指定驱动程序的 Visual Studio 项目文件(*.vcxproj)。
验证完成后,结果将立即可用,并且一直可用,直到使用 /clean 命令从驱动程序的项目目录中删除 SDV 文件。
/干净
从目录中删除 SDV 文件。 由于这些文件用于生成静态驱动程序验证程序报告显示, 因此 /clean 命令也会删除验证的报告。
运行 /clean 命令并为驱动程序或库指定 Visual Studio 项目文件(*.vcxproj)。 该命令仅删除指定的项目的 SDV 文件。
在每个验证之前,为驱动程序项目运行 /clean 命令。
当库文件过时(例如库代码更改时),请为库运行 /clean 命令。
/clean 命令不会删除 Sdv-map.h 文件,如果已批准的标志在 Sdv-map.h 文件中设置为 true(Approved=true)。 然后,SDV 可以使用此文件进行将来的验证。
/?
显示 SDV 命令的用法。 使用此参数的命令不必在生成环境窗口中运行。
评论
运行 msbuild /t:/sdv p:/Inputs= /? 而不显示 SDV 命令的用法。
/clean 命令删除 SDV 用于创建用于验证的静态驱动程序验证程序报告显示的文件。 运行此命令后,为验证显示的静态驱动程序验证程序报告不再可用。
示例
若要使用 mydriver 项目的本地目录中驱动程序文件的所有规则运行 SDV:
msbuild /t:sdv /p:Inputs="/check:*" mydriver.VcxProj /p:Configuration="Windows 7 Release"/p:Platform=Win32
若要在本地目录中的驱动程序文件上使用 CancelSpinLock 规则运行 SDV:
msbuild /t:sdv /p:Inputs="/check:CancelSpinLock" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32
若要使用在 D:\SDV 目录中的 Rules1.sdv 规则列表文件中指定的规则运行 SDV:
msbuild /t:sdv /p:Inputs="/check:D:\SDV\Rules1.sdv" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32
若要再次运行 SDV,这次使用 /clean 选项:
msbuild /t:sdv /p:Inputs="/clean" mydriver.VcxProj /p:Configuration="Windows 7 Release"/p:Platform=Win32
若要显示静态驱动程序验证程序,以便可以在本地目录中查看驱动程序的最新验证结果:
msbuild /t:sdv /p:Inputs="/view" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32