Windows 驱动 INF 验证问题汇总及规范修正方法
第一部分:INF 验证错误和警告总览
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/devtest/inf-validation-errors-and-warnings
1.1 概述
本主题介绍驱动程序安装错误和警告,这些错误和警告可能由 Microsoft Visual Studio 执行的自动 INF 验证或运行 InfVerif 工具时出现。
从使用 WDK 10 的 Visual Studio 2015 开始,生成驱动程序时,以下 INF 文件错误将显示在「错误列表」窗口中。如果从命令行运行 InfVerif.exe,该工具会在命令提示符处或在结果的 HTML 版本中显示这些错误。
1.2 错误指南
错误编号越低,问题越严重。
大多数错误代码可以是警告或错误,具体取决于提供给 InfVerif 的参数。
错误应被视为「必须修复」。必须修复所有错误才能在硬件开发中心通过驱动程序测试。
如果完全理解警告,就可以忽略它们,但它们通常是另一个问题的症状。
例如,有关未使用的部分的警告可能是调用 INF 指令错误的症状。
1.3 处理错误
必须修复所有错误才能在硬件开发中心通过驱动程序测试。错误与以下条件相关:
INF 分析器未能成功解析您的 INF 文件
INF 分析程序只能通过做出默认值假设来解释 INF
InfVerif 的参数指示应将规则集应用于 INF(如
InfVerif /h)
关于警告:虽然在开发人员中心提交驱动程序之前不需要修复警告,但建议花时间了解所报告的问题。如果不了解给定的警告,INF 可能并不总是按预期方式运行。警告通常与可能不正确的语法(在特定情况下是合适的)或对给定 InfVerif 参数有效的语法(但在其他模式下是错误)相关。
1.4 错误代码分类(WDK 10.0.26200 - Windows 11 25H2)
代码范围 | 类别 | 典型问题 |
1000 - 1099 | INF 结构/语法错误 | INF 文件格式不正确 |
1100 - 1199 | 版本和架构声明 | 缺少或无效的 Signature 属性 |
1200 - 1299 | 节(Section)错误 | 节名称拼写错误或缺失 |
1300 - 1399 | 指令(Directive)错误 | 含 1330-1333(详见第二部分) |
1400 - 1499 | 复制/目标文件冲突 | 目标文件名冲突 |
1500 - 1599 | 注册表写入指令 | AddReg 指令语法问题 |
2000 - 2099 | 服务与安装错误 | 含 2084(详见第三部分) |
2100 - 2199 | DDInstall 节错误 | DDInstall 引用不一致 |
2200 - 2299 | 字符串和文件错误 | 字符串未定义、文件缺失 |
第二部分:InfVerif 错误 1330 - 1333
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/devtest/inf-verif-error-1330
2.1 错误 1330 — 功能错误:目标文件被多个源文件写入
问题:当多个 DDInstall 节使用 CopyFiles 指令将不同的源文件复制到单个目标文件时发生冲突。
示例场景:
[CopyFiles.A]
DesiredFileName1, SourceFile1A ; 由 DDInstallSection A 使用
[CopyFiles.B]
DesiredFileName1, SourceFile1B ; 由 DDInstallSection B 使用
当多个 DDInstall 节都在同一系统上得到处理时,这些 CopyFiles 可能会冲突。例如:
两个不同设备使用相同的驱动程序但不同的安装部分
某些脱机驱动程序映像和部署场景
由于来自不同 DDInstall 节的多个源文件会复制到同一个完全相同的单个目标文件,因此来自不同 DDInstall 节的不同源文件会相互覆盖。最后复制的文件放置在目标中,这可能不是预期的结果。
2.2 常见案例与修复
案例一:不同 DDInstall 节将服务可执行文件重命名为服务二进制
[DDInstallSection_A]
CopyFiles = CopyFiles.A
[DDInstallSection_B]
CopyFiles = CopyFiles.B
[CopyFiles.A]
ServiceBinaryFile, ServiceBinaryA
[CopyFiles.B]
ServiceBinaryFile, ServiceBinaryB
修复:确保每个 DDInstall 节使用唯一的服务二进制文件名。
案例二:不同 DDInstall 节重命名源文件到不同目标
当 CopyFiles 将不同源文件重命名并复制到不同目录时,如果目标位置相同也会冲突。
案例三:不同 DDInstall 部分重命名服务二进制
检查所有 DDInstall 节中的 CopyFiles 目标文件名,确保没有跨节重复。
提示:并非所有情况都适用上述案例。可能存在特定于每个 INF 的其他原因。使用 infverif.exe /w /v driver.inf 获取详细的错误上下文。
第三部分:InfVerif 错误 2084
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/devtest/inf-verif-error-2084
3.1 错误信息
错误代码 2084:Service binary '<value>' should reference a CopyFiles destination file.
当服务声明中指定的文件未包含在驱动程序包中时,发生此错误。
InfVerif 验证驱动程序包中的每个服务二进制程序都有相应的文件复制操作。该文件可能:
完全从 INF 的 CopyFiles 指令中省略
存在于某些体系结构或操作系统版本中,但并非在所有情况下都存在
确保正在针对发生错误的架构和操作系统版本进行复制。
3.2 常见原因:拼写错误
[MyCopyFiles]
Binary1.sys
[MyServiceInstallSection]
ServiceBinary=%13%\Binar1y.sys ← 拼写错误!应为 Binary1.sys
3.3 关于收件箱二进制文件
某些收件箱二进制文件用作设备的函数或筛选器驱动程序。从历史上看,这些二进制文件可以直接在服务声明中使用,但 Windows 11 和更新版本需要使用 Include 和 Needs 指令正确引用它们。
WUDFRd.sys(用户模式驱动程序框架反射器)
有关在 INF 文件中指定反射器的方法,请参阅 WDK 文档中「在 INF 文件中指定反射器」章节。
mshidkmdf.sys(Microsoft HID 类 KMDF 驱动程序)
[DDInstall]
Include=MsHidKmdf.inf
Needs=MsHidKmdf.NT
; 同时保留所有现有的 DDInstall 指令
[DDInstall.HW]
Include=MsHidKmdf.inf
Needs=MsHidKmdf.NT.HW
; 同时保留所有现有的 DDInstall.HW 指令
[DDInstall.Services]
Include=MsHidKmdf.inf
Needs=MsHidKmdf.NT.Services
; 同时保留所有现有的 DDInstall.Services 指令
说明:使用 Include 和 Needs 指令时,不要删除现有的 DDInstall 指令。新指令应作为补充添加到现有配置中。
附录:InfVerif 快速命令参考
命令 | 用途 |
| Windows 驱动程序验证模式 |
| 详细验证模式 |
| 详细验证 + 输出到日志文件 |
| KMDF 内核模式验证 |
| UMDF 用户模式验证 |
| 显示 INF 摘要信息 |
| 列出所有验证规则 |
| 显示帮助 |
本文内容全部来自微软官方文档