概述
Windows 驱动开发 INF 文件解析
相关参考
[toc]
INF(Installation Information)文件是 Windows 驱动程序安装过程中非常关键的文本配置文件,它采用特定的节(Section)和键值对格式,用于指导操作系统如何安装、配置和加载驱动程序。
以下是 INF 文件中 常见字段/节(Sections)及其说明,适用于大多数内核模式驱动(KMDF/UMDF/WDM):
一、标准节(Standard Sections)
1. [Version]
必需。定义 INF 文件版本、目标操作系统等。
1 | [Version] |
-
Signature:必须为"$WINDOWS NT$"(现代 Windows 驱动)。 -
Class/ClassGuid:设备安装类,决定设备在设备管理器中的分组。可以参考这篇文章中的类定义填写合适的类和GUID, 保留给系统使用的系统定义的设备安装程序类 - Windows drivers | Microsoft Learn,更完整的可以参考这篇文章:为供应商提供的系统定义的设备安装程序类 - Windows drivers | Microsoft Learn
是否可以自定义 Class 和 ClassName因为 INF 只是告诉 Windows 如何在设备安装时注册和显示该设备的“安装类(setup class)”。Class 是类的名称,ClassGuid 是该类在注册表/设备管理器中用来区分不同类的唯一标识符。Windows 允许驱动包定义自己的安装类,所以你可以填写自定义的值,INF 在安装时会把相应的注册表项写入系统(见你的 ClassInstall32 / SampleClassReg 段),从而在设备管理器中显示自定义的类名、图标等。
需要注意的要点:
• 自定义 ClassGuid 必须是唯一的 GUID,否则会与已有安装类混淆或覆盖别人的类。
• 如果不需要新的类语义,优先使用已有的系统类(以便与系统工具/驱动整理一致)。
• 如果定义新类,要在 INF 中提供注册表信息(如你的 HKR,0,%ClassName%)以设置显示名/图标,并在发布/签名驱动包时保持 ClassGuid 一致。
• 生成 GUID 可用 uuidgen / Visual Studio 的 Create GUID 等工具。 -
Provider:驱动提供商名称(通常用字符串宏)。 -
DriverVer:驱动版本和日期(格式:MM/DD/YYYY, major. minor. build. qfe)。 -
CatalogFile:数字签名目录文件(.cat),用于 WHQL 签名验证。
2. [Manufacturer]
列出支持的硬件制造商及其对应的设备安装节。
1 | [Manufacturer] |
NTamd64表示仅在 64 位 Windows 上使用此节(平台限定后缀)。- 支持多个平台:
NTx86,NTarm64,NTia64等。
3. [MyDeviceModels](自定义节名)
定义具体设备的 Hardware ID 与安装节的映射。
1 | [MyDeviceModels.NTamd64] |
- 左侧是安装节名(如
MyDevice_Install)。 - 右侧是设备的 Hardware ID(由 PnP 管理器匹配)。
%DeviceDesc%是字符串表中的描述(见[Strings]节)。
4. [MyDevice_Install](自定义安装节)
指定驱动文件、注册表设置、服务安装等。
1 | [MyDevice_Install.NT] |
.NT后缀表示适用于所有 NT 内核系统(Windows 2000 及以后)。CopyFiles:指定要复制的文件列表(引用另一个节)。AddService:添加 Windows 服务(驱动本质是内核服务)。
5. [MyDriver_CopyFiles]
列出需要复制到系统目录的驱动文件。
1 | [MyDriver_CopyFiles] |
默认复制到 %SystemRoot%\System32\drivers\(对于 .sys 文件)。
6. [MyDriver_Service_Inst]
定义驱动服务的属性。
1 | [MyDriver_Service_Inst] |
ServiceType:1=SERVICE_KERNEL_DRIVER2=SERVICE_FILE_SYSTEM_DRIVER
StartType:0= BOOT_START(启动早期加载)1= SYSTEM_START2= AUTO_START(系统启动时加载)3= DEMAND_START(按需加载,如设备插入)4= DISABLED
二、可选但常用节
7. [SourceDisksNames] 和 [SourceDisksFiles]
传统上用于指定源文件位置(现代驱动常省略,因 WDK 自动处理)。
1 | [SourceDisksNames] |
- 在 Plug and Play 驱动中通常不需要,除非涉及非标准安装。
8. [DestinationDirs]
指定
CopyFiles的目标目录(可选,默认为 drivers 目录)。
1 | [DestinationDirs] |
常用目录编号(DIRIDs):
10=%SystemRoot%(如C:\Windows)11=%SystemRoot%\System3212=%SystemRoot%\System32\drivers13=%SystemRoot%\Inf16422=%ProgramFiles%
9. [Strings]
✅ [Strings] 段的作用
- 定义所有
%MacroName%的实际文本值。 - 支持本地化:不同语言版本的 INF 可以使用不同的
[Strings]内容(通过.inf+ 语言代码,如mydriver.inf+mydriver.inf.loc,或使用 MUI)。 - 避免硬编码字符串,便于维护和国际化。
🔍 常见 [Strings] 字段及其用途说明
| 宏(%xxx%) | 典型值示例 | 用途说明 |
|---|---|---|
ManufacturerName 或 MFG |
"Contoso Ltd." |
驱动提供商名称,显示在设备管理器“制造商”列。 |
DeviceDesc |
"Contoso USB Adapter" |
设备描述,显示在设备管理器中设备名称。 |
ServiceName 或 SvcDesc |
"ContosoNet" |
驱动服务的显示名称(非内部服务名),用于服务控制面板或日志。 |
DiskName |
"Contoso Driver Disk" |
安装源盘卷标(传统用途,现代驱动常省略)。 |
ClassName |
"Network adapters" |
设备类的人可读名称(若 Class 未内置)。 |
ProviderString |
"© 2025 Contoso Inc." |
可选版权/提供商标识(有时用于 UI 显示)。 |
CatalogFile(不推荐在此定义) |
❌ 通常不应用宏定义 .cat 文件名,应直接写在 [Version] 中。 |
因为签名工具依赖固定文件名。 |
DriverPackageDisplayName |
"Contoso High-Speed USB Driver" |
在“添加硬件向导”或更新驱动时显示的包名称(可选)。 |
InstallKey |
"MyDriver_Install_Key" |
用于注册表路径或自定义安装逻辑中的键名(高级用法)。 |
🌐 多语言支持相关字段(MUI / Localization)
如果你要支持多语言,INF 可能配合 .mui 或 .inf_loc 文件使用,此时 [Strings] 中的字段需与语言资源对应:
1 | [Strings] |
⚠️ 注意:Windows 要求本地化 INF 必须通过 MUI(Multilingual User Interface)机制 或 单独的语言特定 INF 文件 实现,不能在一个 INF 中混合多语言。
🛠️ 高级/特殊用途字段(按需使用)
| 宏 | 说明 |
|---|---|
CoInstaller_Name |
如果使用了 Co-installer(辅助安装程序 DLL),可在此定义其显示名。 |
UpperFilterName, LowerFilterName |
用于 Filter 驱动的注册表项名称(如 UpperFilters=MyUpperFlt)。 |
EventLogName |
自定义事件日志源名称(较少用,通常由驱动自身注册)。 |
HardwareID, CompatibleIDs |
虽然通常直接写在 [Models] 节中,但也可用宏定义(不推荐,降低可读性)。 |
示例:
1 | [Strings] |
❗ 最佳实践建议
-
所有用户可见文本都应放入
[Strings]
包括设备名、服务名、厂商名等,便于本地化。 -
避免在
[Strings]中定义路径或文件名
如%DriverFile%=mydriver.sys—— 这样做无意义且易出错。 -
不要用
[Strings]定义版本号或日期
版本应通过DriverVer=和构建系统(如.inx+stampinf)管理。 -
命名清晰一致
如统一使用MFG,DEVDESC,SVCNAME等缩写,提高可读性。
三、其他重要说明
平台限定后缀(Platform Extensions)
.NT:通用 NT 平台.NTx86:32 位 x 86.NTamd64:64 位 AMD 64/Intel 64.NTarm64:ARM 64- 示例:
[MyDevice_Install.NTamd64.Services]
注释
- 以分号
;开头的行是注释。
行续接
-
用反斜杠
\实现长行续接:1
2AddReg = MyReg_Add \
MyReg_Add2
四、完整简化示例
1 | [Version] |
如需针对特定设备类型(如 USB、PCI、Filter Driver、Co-installer 等)的 INF 字段说明,也可以进一步提问!