如何为驱动程序运行“代码分析”
驱动程序的代码分析提供有关源代码中可能存在缺陷的信息。 可以手动运行代码分析,还可以在每个生成中自动运行代码分析。
本主题内容:
重要
驱动程序的代码分析在 Windows 24H2 WDK 和 EWDK 中可用,但建议它在将来的日期停用。
今后,CodeQL 将成为驱动程序的主要静态分析工具。 CodeQL 提供了一种功能强大的查询语言,可将代码视为要查询的数据库,使编写特定行为、模式等查询变得简单。
有关使用 CodeQL 的详细信息,请参阅 CodeQL 和静态工具徽标测试。
运行代码分析
手动对驱动程序源代码运行代码分析
- 在 Visual Studio 中,选择驱动程序项目文件或解决方案,然后选择要分析的项目配置和平台。
- 从“分析”或“生成”菜单中,单击“对解决方案运行代码分析”。
在每个生成中自动对驱动程序源代码运行代码分析
- 在 Visual Studio 中,右键单击解决方案资源管理器中的驱动程序项目或解决方案,然后单击“属性”。
- 在项目的属性对话框中,单击“ 代码分析”。
- 在“C/C++属性的代码分析”页中,选择要分析的项目配置和平台(例如 Windows 8 和 Win32)。
- 选择“ 在生成时为 C/C++启用代码分析”。
- 在“规则集”下,选择 Microsoft驱动程序建议的规则。 这是驱动程序的默认规则集。
- 在 “生成 ”菜单中,单击“ 生成解决方案”。
查看代码分析结果
如果在源代码中找到可能的缺陷,“ 代码分析结果 ”窗口将显示代码分析警告号和源文件中发生缺陷的行号。
查看缺陷
在“代码分析结果”窗口中,单击行号,并在“代码分析结果”窗口中显示缺陷的说明。
“代码”窗口显示源代码,并指示存在缺陷的位置。
若要了解有关特定警告的详细信息,请单击“代码分析结果”窗口中的“警告”。
查看与生成关联的代码分析日志文件
- 导航到生成配置和平台的目录(例如
\\Windows7Release\\x64
)。 - 如果使用建议的规则,将调用
vc.\*codeanalysis.xml
日志文件。 如果要为 Windows Server 2012 创建驱动程序,则此文件用于创建驱动程序验证日志。
抑制缺陷报告
在某些情况下,你可能想要禁止显示特定警告消息的报告;例如,如果警告主要是信息性的,并且你知道错误的原因。
禁止显示警告消息
若要删除报告缺陷的实例,请在“代码分析结果”窗口中选择行号和警告。
在警告的展开说明中,单击“ 操作>抑制消息>在源中”。
带有禁止说明符的杂注警告指令仅对紧跟 #pragma 警告语句的代码行禁止显示警告。
#pragma warning(suppress: 6014)
更改内核模式驱动程序的警告 C6262 的堆栈使用限制
在用户模式和内核模式代码中,堆栈空间有限,并且未能提交堆栈页会导致堆栈溢出异常。 在内核模式下,高堆栈使用率尤其令人担忧,因为可用的堆栈空间总数仅为 12 KB。 内核模式代码应主动限制堆栈的使用。
如果函数本地使用了超过 1 KB 的堆栈空间,则代码分析工具会发出警告 C6262 。 如果要调查可能占用大量资源的函数,可以自定义或降低 C6262 使用的堆栈阈值限制。 如果降低堆栈阈值限制,则代码分析工具可能会发现更多问题。 然后,可以选择解决这些堆栈使用问题。 例如,可以将阈值降低到 400 字节,以查看其他函数是否正在使用资源。
自定义 C6262 的堆栈大小限制
- 在记事本或其他文本编辑器中打开内核模式驱动程序(或组件)的 Visual Studio 项目文件(.vcxproj)。
- 为编译器< ClCompile> 添加新的 ItemDefinitionGroup>。<
- <添加 PREfastAdditionalOptions> 元素并设置堆栈大小<字节>。 默认值为 stacksize1024。
<ItemDefinitionGroup>
<ClCompile>
<!-- Change stack depth for C6262 from 1024 to 400 -->
<PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
保存项目文件。 启动 Visual Studio,加载更新的驱动程序项目,并运行代码分析。
若要还原为默认值 1 KB,请撤消对项目文件所做的更改,或者将堆栈大小值更改为 stacksize1024。