Windows INF文件语法

Windows INF文件语法详解

  • INF 文件概述
  • INF 文件结构
    • 版本信息部分([Version])
    • 制造商和设备列表部分([Manufacturer] 和相关设备列表节)
    • 设备安装节( [UsbSer_Install] 及其子节)
    • 文件和目录部分([DestinationDirs]、[SourceDisksNames]、[SourceDisksFiles])
    • 字符串定义部分([Strings])
  • 完整示例获取

INF 文件概述

INF 文件(Information File)是一种文本格式的文件,在 Windows 操作系统中用于设备驱动程序和软件组件的安装、配置以及系统设置。它包含了安装设备驱动程序所需的详细指令和信息,通过这些指令,Windows 系统可以准确地将驱动程序文件复制到适当的位置、修改注册表项、配置服务等操作,从而使设备能够正常工作

INF 文件结构

版本信息部分([Version])

[Version] 节包含了驱动程序的基本版本和签名信息。
Signature 字段表示驱动程序的签名类型,如 W i n d o w s N T Windows NT WindowsNT,表明符合 Windows NT 的签名要求。Class 字段指定了设备所属的类别,像 Ports 表示端口类设备,ClassGuid 提供了该类别设备的全局唯一标识符,Provider 则是设备驱动的提供者名称,CatalogFile 指向了用于数字签名验证的编目文件,DriverVer 明确了驱动程序的版本日期和版本号

/** 示例 */
[Version]
Signature   = "$Windows NT$"							/** Windows NT 签名要求 */
Class       = Ports										/** 端口类设备 */
ClassGuid   = {4D36E978-E325-11CE-BFC1-08002BE10318}	/** 全局唯一标识符 */
Provider    = "ZXING"									/** 设备驱动的提供者名称 厂商描述*/
CatalogFile = ZXING_usbser.cat							/** 签名文件 Windows 设备安装使用数字签名来验证驱动程序包的完整性以及提供驱动程序包的供应商(软件发布者)的身份 */
DriverVer   = 05/11/2023, 1.0.0.0						/** 驱动程序的版本日期和版本号 */

Note 实际注释符号应为";"

制造商和设备列表部分([Manufacturer] 和相关设备列表节)

[Manufacturer] 节将制造商名称与设备列表相关联。如,制造商名称通过字符串引用(如 %VendorName%)指向不同架构下的设备列表节,这些设备列表节(如 [DeviceList.NTx86][DeviceList.NTamd64][DeviceList.NTarm])针对不同的处理器架构(x86x64ARM)详细列出了设备名称和对应的安装节

/** 示例 */
/** 关联设备制造商名称与具体的设备列表配置,指定了不同 Windows 架构下对应的设备列表节 */
[Manufacturer]
/**
 * 通过 %VendorName%(即 "ZXING")关联到后续的 DeviceList,并且针对 NTx86、NTamd64、NTarm 等不同的
 * Windows 处理器架构分别指定了对应的设备配置所在的节
 */
%VendorName% = DeviceList,NTx86,NTamd64,NTarm 		

[DeviceList.NTx86]、[DeviceList.NTamd64][DeviceList.NTarm] 节分别针对不同的 Windows 处理器架构(x86、x64、ARM),详细定义了不同名称的设备对应的具体安装配置信息,通过 USB 设备的 VIDVendor ID,厂商识别码)、PIDProduct ID,产品识别码)以及 MI(可能是接口相关标识)的组合来精确匹配设备并关联到后续的安装配置节

/** 示例 */
/**
 * 在各节中,不同的 %DeviceName_Default% 、%DeviceName_AT% 等设备名称被关联到 UsbSer_Install 安装配置节,
 * 且每个架构下对应的 USB 设备识别码组合略有不同,不过都存在相似的匹配规则,基本围绕 USB\VID_0FFE&PID_0001 以及不同的 MI 值来区分具体设备     
 **/
[DeviceList.NTx86]
%DeviceName_Default% = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_00
%DeviceName_AT%      = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_02
%DeviceName_Default% = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_04

[DeviceList.NTamd64]
%DeviceName_Default% = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_00
%DeviceName_AT% 	 = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_02
%DeviceName_Default% = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_04

[DeviceList.NTarm]
%DeviceName_Default% = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_00
%DeviceName_AT% 	 = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_02
%DeviceName_Default% = UsbSer_Install, USB\VID_0FFE&PID_0001&MI_04

设备安装节( [UsbSer_Install] 及其子节)

[UsbSer_Install] 节是具体描述设备安装相关操作的关键节,通过包含其他文件、定义文件复制、注册表添加等操作来完成驱动安装过程中涉及的多个配置任务

  • 基于 include 指令引入其他必要的 INF 文件(如 mdmcpq.inf)来获取更多的安装资源或通用配置
  • 基于 CopyFiles 指令指定要复制的文件,文件内容可能在引入的其他文件中定义
  • 基于 AddReg 子节添加注册表项,设置设备加载器、指定驱动程序文件路径、配置设备属性页相关信息
  • 基于 AddProperty 子节添加设备的属性
  • 基于 Services 相关子节添加和配置设备驱动相关的服务,包括服务的名称、类型、启动类型、错误控制和服务二进制文件路径
[UsbSer_Install]
/** See https://support.microsoft.com/en-us/kb/837637 */
/** include = mdmcpq.inf 表示包含 mdmcpq.inf 文件,借助其中的一些通用配置或者依赖其定义的部分资源来完成本设备驱动的安装 */
include     = mdmcpq.inf				
/**
 * CopyFiles = FakeModemCopyFileSection 说明要复制文件,
 * 具体复制的文件内容在 mdmcpq.inf 文件中定义的 FakeModemCopyFileSection 节里有说明
 */
CopyFiles   = FakeModemCopyFileSection 	/** defined in mdmcpq.inf */
/** 定义后续要进行的注册表添加 AddReg 和添加属性 AddProperty 的相关操作对应的子节 */
AddReg      = UsbSer_Install.AddReg
AddProperty = UsbSer_AddProperty

[UsbSer_Install.AddReg]
/** 通过注册表操作配置设备加载相关的驱动 */
HKR,,DevLoader,,*ntkern					/** HKR,,DevLoader,,*ntkern 指定设备加载器相关设置 */
HKR,,NTMPDriver,,usbser.sys				/** HKR,,NTMPDriver,,usbser.sys 明确对应的驱动程序文件为 usbser.sys */
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"	/** 配置设备属性页相关的关联信息 */

[UsbSer_Install.Services]
/**
 * 添加名为 usbser 的服务,并且指定了服务的相关属性,后续在 UsbSer_Service 子节里详细定义了服务的显示名称、
 * 类型、启动类型、错误控制以及服务对应的二进制文件路径等信息
 */
AddService = usbser,0x00000002,UsbSer_Service

[UsbSer_Service]
DisplayName   = %Service%		/** 服务显示名称 */
/** ServiceType = 1代表SERVICE_KERNEL_DRIVER。这意味着这个服务是一个内核模式(Kernel - Mode)的驱动服务 */
ServiceType   = 1				/** 服务类型 */
/** StartType = 3代表SERVICE_DEMAND_START(手动启动)。这意味着该服务不会在系统启动时自动运行 */
StartType     = 3				/** 启动类型 */
/** ErrorControl = 1代表SERVICE_ERROR_NORMAL */
ErrorControl  = 1				/** 错误控制 */
/** 数字12对应的是$WINDIR$\system32\drivers目录 */
ServiceBinary = %12%\usbser.sys	/** 服务对应的二进制文件路径 */

[UsbSer_AddProperty]
/** 设置 GenericDriverInstalled,,,,1,表示通用驱动已安装的属性 */
GenericDriverInstalled,,,,1

文件和目录部分([DestinationDirs]、[SourceDisksNames]、[SourceDisksFiles])

[DestinationDirs] 节用于指定文件复制操作的目标目录。[SourceDisksNames] 节定义了安装源磁盘的名称,方便系统识别安装源。[SourceDisksFiles] 节会列举源磁盘上的文件,有助于准确找到安装所需的文件

/** DestinationDirs 节用于指定文件复制等操作时的目标目录相关信息 */
[DestinationDirs]
/**
  * 当 INF 文件中有文件复制(如通过CopyFiles指令)操作时,如果没有为特定的文件指定目标目录,
  * 那么这些文件默认会被复制到C:\Windows\system32\drivers目录下
  */
DefaultDestDir = 12		/** 数字12对应的是$WINDIR$\system32\drivers目录 */

/** SourceDisksNames 节定义了安装源磁盘的名称相关描述,方便系统识别安装源情况 */
[SourceDisksNames]
/** 左边的 “1” 是一个索引或者标识符。它用于在 INF 文件的其他部分(比如[SourceDisksFiles]节)引用这个安装源磁盘 */
1 = %SourceName%

/** SourceDisksFiles 节(虽然当前未列出具体内容)通常是用来列举具体的源磁盘上的文件相关情况,便于安装过程中准确找到需要的文件进行操作 */
[SourceDisksFiles]

字符串定义部分([Strings])

这部分定义了在整个 INF 文件中会用到的各种字符串常量,如设备名称、制造商名称、设备 ID 等信息。通过字符串引用(如 %DeviceName_Default%)的方式在其他部分使用这些定义好的字符串,方便统一管理和修改这些信息,避免在文件中重复书写具体内容

/** 示例 */
[Strings]
DeviceName_Default = "ZXING USB-Serial Debug"
DeviceName_AT = "ZXING USB-Serial AT"
VendorName = "ZING"										/** 设备的生产厂商 */
SourceName = "ZING Virtual Serial Install Disk"			/** 安装源的名称 */
DeviceID   = "VID_0FFE&PID_0001&MI_00"
DeviceGUID = "{3c4ea5ec-130a-452e-5c2a-415afc3a51a4}"	/** 全局唯一标识符 */
Service    = "USB COM Port"								/** 服务名称 */

完整示例获取

完整示例请从我的资源获取
写在最后:介绍这个的起因是为了后面介绍如何为虚拟串口分发驱动而实现 Windows 设备友好名称,感兴趣的朋友可以点个关注点个赞

你可能感兴趣的:(Windows,windows,windows,驱动,INF)