静态工具徽标测试

此测试执行静态分析,旨在提高驱动程序的可靠性和安全性。 内核模式驱动程序提交需要通过静态工具徽标测试进行认证。 CodeQL 必须用于对内核模式驱动程序进行静态分析,以便提交给 Microsoft 进行签名或认证,以符合 Windows 硬件兼容性计划。

测试详细信息

   
规范
  • Device.DevFund.StaticTools.StaticAnalysisForDrivers
平台
  • Windows 11 客户端 (x64)
  • Windows 11,客户端 (ARM64)
  • Windows Server
支持的版本
  • Windows 11 客户端 (x64)
  • Windows 11,客户端 (ARM64)
  • Windows Server
预计运行时间(以分钟为单位) 5
类别 开发
超时(以分钟为单位) 0
需要重启 false
需要特殊配置 false
类型 automatic

Windows 客户端认证的静态分析

CodeQL 是一种功能强大的静态分析技术,用于保护软件。 通过将一套广泛的高价值安全性查询与一个可靠的平台相结合,使它成为对保护第三方驱动程序代码非常有用的工具。

为了提高 Windows 生态系统的安全标准,Microsoft 在 Windows 硬件兼容性计划中添加了这一要求,该计划规定所有驱动程序提交都必须在驱动程序源代码上使用 CodeQL 引擎,并修复任何被视为“必须修复”查询

此要求由静态工具徽标测试强制执行。

有关如何下载 CodeQL 并对驱动程序源代码运行该引擎的详细信息,请参阅 CodeQL 和静态工具徽标测试。 按照该页面以及下面的 CodeQL 和 DVL 生成一节中所述进行操作,这样可确保静态工具徽标测试正确使用在静态工具徽标测试中对驱动程序源代码运行 CodeQL 的结果。

CodeQL 和静态工具徽标测试适用于哪些类型的驱动程序?

目前,静态工具徽标测试要求运行 CodeQL,并为除图形驱动程序外的所有内核模式驱动程序传递“必须修复”查询集。 注意:强烈建议在图形驱动程序上运行 CodeQL,即使当前不需要这样做。 一些查询还可能在用户模式组件中发现有用的缺陷。

我们预计未来将扩展测试及其查询,以要求图形驱动程序、用户模式驱动程序和驱动程序组件以及其他驱动程序包组件的结果。 如果在图形驱动程序或用户模式驱动程序上运行 CodeQL 时遇到意外行为或误报,请在 Windows-Driver-Developer-Supplemental-Tools repo 上提交问题。

如果在图形驱动程序上运行测试,测试将在 HLK 中填充,但默认情况下通过。 如果仅在用户模式组件上运行,或者提交了一个没有代码的驱动程序包(如 inf 扩展),那么测试可能不会填充。 如果正在提交内核模式组件,但测试意外未填充,请确保驱动程序经过了测试签名(请参阅下面的注释)。

Windows Server 认证静态分析的新增功能

对于 Windows Server 2025 认证,CodeQL 将成为静态工具徽标测试所需的工具,这意味着所有驱动程序提交必须至少通过所有“必须修复”规则才能被 WHCP 接受。 如果你正在为 Windows Server 2022 及以下版本进行认证;可以使用 CA、SDV 和 CodeQL。 将 WDK 版本与匹配的 OS 发行版/版本一起使用。

有关下载不同版本的 WDK 的信息,请参阅下载 Windows 驱动程序工具包 (WDK)。 加入 Windows 预览体验计划以下载 WDK Insider Preview 版本 (https://aka.ms/wipwdk)。

CodeQL 和驱动程序验证日志 (DVL) 生成

Microsoft 正在强制要求使用静态工具徽标测试运行 CodeQL 查询。 静态工具徽标测试使用驱动程序验证日志 (DVL) 从对驱动程序源代码运行的不同静态分析收集结果。 随后该 DVL 在静态工具徽标测试中通过 HLK 测试进行分析。

CodeQL 结果将遵循使用 DVL 的相同模型,以表明要认证的驱动程序运行了相应的 CodeQL 查询,以便通过用于认证的 HLK 测试。

将 .sarif 文件放在要生成 DVL 的 .vcxproj 文件的同一个目录中。 只要文件名以“.sarif”结尾,确切的名称就无关紧要。

其他文档

此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:

运行测试

在运行测试之前,必须通过执行以下步骤来创建驱动程序验证日志 (DVL)。

  1. 根据需要对驱动程序源代码运行 CodeQL、静态驱动程序验证程序和代码分析工具。

  2. 运行生成 DVL 文件的实用工具。 有关创建驱动程序验证日志文件以包括在提交中的详细信息,请参阅创建驱动程序验证日志

  3. 从用于创建 DVL 文件的计算机将 DVL 文件复制到用于运行静态工具徽标测试的计算机。 将文件复制到测试计算机上的 %systemdrive%\DVL 目录。 在复制新驱动程序验证日志之前,请确保删除测试计算机上该目录中的内容。

  4. 运行静态工具徽标测试。 如果测试未在 HLK 中填充,请确保驱动程序经过测试签名(请参阅下文)。 另外,如果没有将 .sys 文件作为包的一部分提交,那么预计测试将无法填充。

注意

静态工具徽标测试的目标是要求作为驱动程序开发人员,在提交驱动程序之前对驱动程序运行 CodeQL,以帮助消除错误。 然而,由于体系结构限制,我们在过去的测试中收到了错误地要求堆栈上其他驱动程序的 CodeQL 结果的报告,从而阻止了认证。

为了在 Windows 24H2 中解决此问题,我们已转移到一个模型,在该模型中检查被测设备的驱动程序签名。 通过此更改,测试不会标记收件箱 Windows 驱动程序。 此外,为了解除在其他第三方设备上执行 HLK 测试的开发人员的阻碍,该测试还将避免为 WHCP 签名的驱动程序标记结果。

运行此测试进行认证时,应对驱动程序进行测试签名,以确保测试功能正确。 如果不这样做,可能会导致测试无法警告 CodeQL 违规,或者测试无法枚举。

注意

静态工具徽标测试只需要 DVL 文件来显示代码 QL 已运行。 该测试不要求所有规则都通过。 此外,必须在具有桌面的服务器上运行此作业。 如果 HLK 测试由于使用服务器核心而失败(并显示错误消息:“找不到 RoMetadata.dll”),解决方法是在具有桌面的服务器上运行,然后将包与包含服务器核心结果的包合并。 有关如何合并数据包的信息,请单击此处:/windows-hardware/test/hlk/user/merge-packages

故障排除

有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题

更多信息

命令语法

命令选项 说明

TE.exe /inproc /enablewttlogging /appendwttlogging Devfund_DvlTest.dll /p:WDKClass=[WDKClass] /p:DeviceClass=[DeviceClass] /p:QueryDriverNames=[QueryDriverNames]

运行测试。

注意

有关此测试二进制文件的命令行帮助,请键入 /?。

文件列表

文件 位置

Devfund_DvlTest.dll

<testbinroot>\OSBinRoot

Microsoft.StaticToolsLogo.ObjectModel.dll

<testbinroot>\OSBinRoot

TE.exe

<testbinroot>\OSBinRoot

Parameters

参数名称 参数说明
WDKClass 设备分类
DeviceClass 设备类参数
QueryDriverNames 预期驱动程序名称。