下面是INF文件中会出现的节的说明,我尽可能涵盖所有的部分。
inf-version
[Version]Signature="signature-name"
[Class=class-name]
[ClassGuid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}]
[Provider=%INF-creator%]
[ExtensionId={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}]
[LayoutFile=filename.inf [,filename.inf]... ] (Windows 2000 and Windows XP)[CatalogFile=filename.cat]
[CatalogFile.nt=unique-filename.cat]
[CatalogFile.ntx86=unique-filename.cat]
[CatalogFile.ntia64=unique-filename.cat] (Windows XP and later versions of Windows)
[CatalogFile.ntamd64=unique-filename.cat] (Windows XP and later versions of Windows)
[CatalogFile.ntarm=unique-filename.cat] (Windows 8 and later versions of Windows)
[CatalogFile.ntarm64=unique-filename.cat] (Windows 10 version 1709 and later versions of Windows)DriverVer=mm/dd/yyyy,w.x.y.z
[PnpLockDown=0|1] (Windows Vista and later versions of Windows)
[DriverPackageDisplayName=%driver-package-description%]
[DriverPackageType=PackageType]
这部分一般也是inf文件最开始的部分,里面需要注意的是class、CatalogFile这两部分;CatalogFile指定的文件就是数字签名文件。下面是一个正常的inf文件:
[Version]
Signature="$Windows NT$"
Class=SCSIAdapter
ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
Provider=%INF_Provider%
CatalogFile=example.cat
DriverVer=01/29/2010,1.2.3.4
PnpLockdown=1
- Signature=“signature-name”:必须为 $Windows NT$ 或 $Chicago$。 这表示此 INF 对其有效的操作系统;
- Class=class-name:对于任何标准类型的设备,这将指定使用此 INF 文件安装的设备类型的设备 安装类 的名称。 此名称通常是 Devguid.h 中列出的系统定义的类名称之一,例如 Net 或 Display;
- ClassGuid={nnnnnn-nnnn-nn nnnn-nnnn-nnnnnn}:指定 设备安装类 GUID。 GUID 值的格式如下所示,其中每个 n 是一个十六进制数字。此 GUID 值指定要分配给从此 INF 文件安装的设备的设备安装程序类。 此类特定的 GUID 值还标识设备类型和类特定属性页提供程序(如果有)的设备类安装程序;
- ExtensionId={xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}:指定创作扩展 INF 时扩展 ID GUID。 GUID 值的格式如下所示,其中每个 x 都是十六进制数字。创建扩展 INF 的初始版本时,INF 必须指定新生成的 ExtensionId 值。 但是,在更新现有扩展 INF 时, ExtensionId 必须保持不变,以便扩展 INF 的多个相关版本相互进行版本控制,而不是被视为可以同时安装在同一设备实例上的独立扩展 INF;
- ClassVer=major.small: 保留供系统使用,除非设备类(如 Printer)明确要求;
- Provider=%INF-creator%:标识 INF 文件的提供程序。 通常,这是指定为 %组织名称% 字符串,稍后将在 INF 文件的 Strings 节中展开;
- CatalogFile=filename.cat:指定目录 (.cat) 要包含在驱动程序包的分发介质上的文件。将 驱动程序包 提交到 Microsoft 进行数字签名时,在 WHQL 测试并向其分配数字签名后,WHQL 会提供驱动程序包的 目录文件 。 有关 IHV 或 OEM 驱动程序包的测试和签名的详细信息, 目录文件未在 INF 的 SourceDisksFiles 部分或 CopyFiles 指令中列出。 Windows 假定目录文件与 INF 文件位于同一位置。系统提供的 INF 文件永远不会有 CatalogFile= 条目,因为操作系统会针对系统提供的所有 xxx.cat 文件验证此类 INF 的签名;
- DriverVer=mm/dd/yyyy,w.x.y.z:此项指定此 INF 文件安装的驱动程序的版本信息。 从 Windows 2000 开始,此条目是必需的;
- PnpLockDown=0|1:指定 PnP)即插即用 是否阻止应用程序直接修改驱动程序包的 INF 文件指定的文件。 如果 PnpLockDown 指令设置为 1,PnP 会阻止应用程序直接修改由 INF CopyFiles 指令复制的文件。 否则,如果该指令未包含在 INF 文件中,或者指令的值设置为零,则具有管理员权限的应用程序可以直接修改这些文件。 以这种方式保护的驱动程序文件称为 第三方受保护的驱动程序文件;
inf-string
[Strings] |
[Strings.LanguageID] ...strkey1 = ["]some string["]
strkey2 = " string-with-leading-or-trailing-whitespace " | "very-long-multiline-string" | "string-with-semicolon" | "string-ending-in-backslash" |""double-quoted-string-value""...
一般这个节都是在最后定义,因为许多字符串都会使用宏的方式指定。
- strkey1, strkey2, ...:INF 文件中的每个字符串键必须指定由字母、数字和或其他显式可见字符组成的唯一名称。此类 strkey 标记中的 % 字符必须表示为 %%;
- “some string”:指定一个字符串,可以选择使用双引号字符 (“) 分隔,其中包含字母、数字、标点符号,甚至可能包含某些隐式可见字符,尤其是内部空格和/或制表符。 但是,未带引号的字符串不能包含内部双引号 (“) 、分号 (;) 、换行、返回或任何不可见的控制字符,并且不能将反斜杠 作为其最后一个字符;
INF-SourceDisksNames
SourceDisksNames 部分标识包含要在安装期间传输到目标计算机的源文件的磁盘或 CD-ROM 光盘。
[SourceDisksNames] |
[SourceDisksNames.x86] |
[SourceDisksNames.ia64] | (Windows XP and later versions of Windows)
[SourceDisksNames.amd64] | (Windows XP and later versions of Windows)
[SourceDisksNames.arm] | (Windows 8 and later versions of Windows)
[SourceDisksNames.arm64] (Windows 10 version 1709 and later versions of Windows)diskid = disk-description[,tag-or-cab-file] |
diskid = disk-description[,[tag-or-cab-file][,[unused][,path]]] |
diskid = disk-description[,[tag-or-cab-file],[unused],[path][,flags]] |
diskid = disk-description[,[tag-or-cab-file],[unused],[path],[flags][,tag-file]] (Windows XP and later versions of Windows)
...
- diskid:指定标识源磁盘的十进制格式的非否定整数。 此值需要的存储不能超过 4 个字节。 如果分发有多个源磁盘,则本部分中的每个 diskid 条目必须具有唯一值,例如 1、 2、 3 等;
- disk-description:指定 %strkey% 标记或描述 diskid 标识的磁盘的内容和/或用途的“带引号的字符串”。 安装程序可以在安装过程中向最终用户显示此字符串的值,例如,标识要在安装过程的特定阶段插入驱动器的源磁盘。本节中的每个 %strkey% 规范都必须在 INF 的 string 部分中定义。 任何不是 %strkey%字符串的磁盘说明都是用户可见的字符串,如果具有任何前导空格或尾随空格,则必须用双引号字符 (“) 分隔;
- tag-or-cab-file:此可选值指定分发磁盘上提供的 标记文件 或 cabinet (.cab) 文件 的名称,该文件位于 安装根 目录或 路径指定的子目录中(如果有)。 值应仅指定文件名和扩展名,而不指定任何目录或子目录。Windows 使用标记文件来验证用户是否插入了正确的安装磁盘。 可移动媒体需要标记文件,对于固定媒体,标记文件是可选的。如果 Windows 无法在安装介质上按名称找到安装文件,并且 tag-or-cab-file 的扩展名为 .cab,Windows 将其用作包含安装文件的 cabinet 文件的名称。如果 为 .指定了 cab 扩展,Windows 将该文件视为标记文件和内阁文件;
- unused:Windows 2000 及更高版本的 Windows 不再支持此项;
- path:此可选值指定包含源文件的分发磁盘上的目录路径。 路径相对于安装根目录,表示为 \dirname1\dirname2...等。 如果某个条目中省略此值,则假定文件位于分发磁盘的安装根目录中,可以使用 INF SourceDisksFiles 节 指定包含源文件的子目录(相对于给定路径目录)。 但是,标记文件和 cabinet 文件 必须驻留在给定的路径目录或安装根目录中;
- flag:从 Windows XP 开始,将其设置为 0x10 将强制 Windows 使用 tag-or-cab-file 作为 cabinet 文件名,并使用 tag-file 作为标记文件名。 否则, 标志 仅供内部使用;
- tag-file:从 Windows XP 开始,如果 标志 设置为 0x10,则此可选值指定在分发介质上提供的 标记文件 的名称,该文件位于 安装根 目录或 路径指定的子目录中。 值应指定不带路径信息的文件名和扩展名;
INF-SourceDisksFiles
SourceDisksFiles 部分命名安装期间使用的源文件,标识包含这些文件的安装磁盘,并提供包含单个文件的分发磁盘上的目录路径(如果有)。
为了使驱动程序文件或应用程序文件作为已签名驱动程序包的一部分包含在内,该文件必须具有相应的 INF SourceDisksFiles 节条目和相应的 INF CopyFiles 指令。
[SourceDisksFiles] |
[SourceDisksFiles.x86] |
[SourceDisksFiles.ia64] | (Windows XP and later versions of Windows)
[SourceDisksFiles.amd64] | (Windows XP and later versions of Windows)
[SourceDisksFiles.arm] | (Windows 8 and later versions of Windows)
[SourceDisksFiles.arm64] (Windows 10 version 1709 and later versions of Windows)filename=diskid[,[ subdir][,size]]
...
- filename:指定源磁盘上文件的名称;
- diskid:指定标识包含文件的源磁盘的整数。 如果包含任何命名文件 ,则该值与初始子目录 (子目录) 路径 (必须在同一 INF 的 SourceDisksNames 节中定义;
- subdir:此可选值指定子目录 ,相对于 SourceDisksNames 节的路径值。如果某个条目中省略此值,则假定命名的源文件位于在给定磁盘的 SourceDisksFiles 节中指定的路径目录中,如果未指定路径目录,则位于安装根目录中;
- size:此可选值指定给定文件的未压缩大小(以字节为单位);
注意:
SourceDisksFiles 节可以包含任意数量的条目,分发磁盘上的每个文件对应一个条目。 具有 SourceDisksFiles 节的任何 INF 还必须具有 INF SourceDisksNames 节。 按照约定, SourceDisksNames 和 SourceDisksFiles 部分遵循 INF 版本部分。
每个文件名条目都必须指定源磁盘上文件的确切名称。 不能使用 %strkey% 字符串来指定文件名。
若要支持在多个系统体系结构上分发驱动程序文件,可以通过将 .x86、.ia64、.amd64、.arm 或 .arm64 扩展添加到 SourceDisksFiles 来指定特定于体系结构的 SourceDisksFiles 部分。 请注意,与其他部分(如 DDInstall 部分)不同, SourceDisksFiles 部分的平台扩展不是 .ntx86、 .ntia64、 .ntamd64 等。
例如,若要为基于 x86 的系统指定源磁盘名称部分,请使用 SourceDisksFiles.x86 节,而不是 SourceDisksFiles.ntx86 节。 同样,使用 SourceDisksFiles.ia64 节指定基于 Itanium 的系统,使用 SourceDisksFiles.amd64 节指定基于 x64 的系统。
INF-Manufacturer
Manufacturer部分标识使用INF文件安装的一个或多个设备的制造商。
[Manufacturer]manufacturer-identifier
[manufacturer-identifier]
[manufacturer-identifier]
...manufacturer-name |
%strkey%=models-section-name |
%strkey%=models-section-name [,TargetOSVersion] [,TargetOSVersion] ... (Windows XP and later versions of Windows)
- manufacturer-name:标识设备的制造商。 INF 还必须包含同名的相应 INF models部分 ;
- strkey:指定一个标记,该标记在表示制造商名称的 INF 文件中是唯一的。 每个此类 %strkey% 字符串都必须在 INF 文件的 INF 字符串部分中 定义;
- models-section-name:为 INF 文件中每个制造商 的 INF models 部分 指定 INF 编写器定义的名称。 此值在 INF 文件中必须是唯一的,并且必须遵循定义节名称的一般规则;
- TargetOSVersion:指定可以使用各种 INF models 部分的一个或多个目标操作系统版本。 Windows 选择与执行它的操作系统版本最匹配的 INF models 部分;
INF-model
每个制造商 的model 部分标识至少一个设备,引用该设备的 INF 文件的 DDInstall 部分,并为该设备指定唯一到model部分的硬件标识符 (ID) 。
[models-section-name] |
[models-section-name.TargetOSVersion] (Windows XP and later versions of Windows)device-description=install-section-name,[hw-id][,compatible-id...]
[device-description=install-section-name,[hw-id][,compatible-id]...] ...
- device-description:标识要安装的设备,表示为可见字符的任何唯一%组合或在 INF string节中定义的%strkey% 标记;
- install-section-name:指定要用于设备的 INF 安装部分的未修饰名称和兼容型号的设备(如果有任何) ;
- hw-id: 指定供应商定义的 硬件 ID 字符串,该字符串标识设备,PnP 管理器使用该字符串查找此设备的 INF 文件匹配项。 此类硬件 ID 具有以下格式之一:
- 1. enumerator\enumerator-specific-device-id: 单个枚举器向 PnP 管理器报告的单个 PnP 设备的典型格式。 例如, USB\VID_045E&PID_00B 标识 USB 总线上的 Microsoft HID 键盘设备。 根据枚举器的不同,此类规范甚至可以包括设备的硬件修订号,例如 PCI\VEN_1011&DEV_002&SUBSYS_00000000&REV_02;
- 2. *enumerator-specific-device-id: 用星号 (*) 指示设备受多个枚举器支持。 例如, *PNP0F01 标识 Microsoft 串行鼠标,该鼠标的兼容 ID 规范 SERENUM\PNP0F01也为 ;
- 3. device-class-specific-ID: 是特定于 I/O 总线的格式,如总线的硬件规范中所述,适用于该类型 I/O 总线上所有外围设备的硬件 ID;
- compatible-id: 指定供应商定义的 兼容 ID 字符串,用于标识兼容设备。 可以为“模型”部分中的条目指定任意数量的 compatible-id 值,每个值与下一个值用逗号分隔。 所有此类兼容设备和/或设备型号都由与初始 hw-id 指定的设备相同的驱动程序控制;
INF-DestinationDirs
DestinationDirs 节指定对 INF 文件中其他位置按名称引用的文件执行的所有复制、删除和/或重命名操作的目标目录。
[DestinationDirs][DefaultDestDir=dirid[,subdir]]
[file-list-section=dirid[,subdir]]...
- DefaultDestDir=dirid[,subdir]: 指定对文件执行的所有复制、删除和重命名操作的默认目标目录,这些操作未显式列在此处由其他条目引用的文件 列表节 中。 若要确保文件操作始终发生在正确的目录中,包含 Include 和 Needs 条目的 INF 文件不应指定默认目标目录;
- file-list-section=dirid[,subdir]] ...:指定 INF 文件中其他位置的 CopyFiles、 RenFiles 或 DelFiles 指令引用的节的 INF 编写器确定的名称。 如果此部分具有 DefaultDestDir 条目,并且此 INF 中指定的所有复制文件操作具有相同的目标目标,则此类条目是可选的。 但是,INF 中其他位置的 RenFiles 或 DelFiles 指令引用的任何 file-list-section 都必须在此处列出;
- dirid:为按名称引用的文件(可能位于 INF 的命名 file-list-section 内)的操作指定目标目录的目录标识符。 在Windows 10版本 1709 及更高版本的 Windows 上,建议使用 DIRID 13;
- subdir: 指定 由 dirid 标识的目录下的子目录 (及其路径的其余部分(如果有),) 指定为给定 file-list-section 中文件操作的目标;