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 和更新版本需要使用 IncludeNeeds 指令正确引用它们。

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 指令


说明:使用 IncludeNeeds 指令时,不要删除现有的 DDInstall 指令。新指令应作为补充添加到现有配置中。


 

附录:InfVerif 快速命令参考

命令

用途

infverif.exe   /w driver.inf

Windows 驱动程序验证模式

infverif.exe   /w /v driver.inf

详细验证模式

infverif.exe   /w /v /l result.log driver.inf

详细验证 + 输出到日志文件

infverif.exe   /k driver.inf

KMDF 内核模式验证

infverif.exe   /u driver.inf

UMDF 用户模式验证

infverif.exe   /info driver.inf

显示 INF 摘要信息

infverif.exe   /rules

列出所有验证规则

infverif.exe   /h

显示帮助


本文内容全部来自微软官方文档