INF 文件常规语法规则

INF 文件是组织成命名节的文本文件。 某些节具有系统定义的名称,某些节的名称由 INF 文件的编写器确定。

每个部分都包含由设备安装组件解释的特定于部分的条目。 某些条目以预定义关键字 (keyword) 开头。 这些条目称为 指令

出于特定目的,某些 INF 文件条目基本上是从一个部分到另一个部分的指针。 例如, INF AddReg 指令 标识包含指示 Windows 修改注册表的条目的部分。 这些条目有时包括其他参数 (Windows 在安装过程中解释的必需或可选) 。

其他 INF 文件条目不指向其他部分,但提供 Windows 在安装期间使用的信息,例如文件名、注册表值、硬件配置信息、标志等。 例如, INF DriverVer 指令 提供驱动程序版本信息。

当 Windows 开始安装时,它首先查找 INF 版本部分 来验证 INF 文件的有效性。 然后,它通过查找 INF 制造商部分来启动安装。 本部分包含 对 INF 模型 部分的指令,这些指令反过来又根据所安装设备的硬件 ID 提供导致各种 INF DDInstall 部分的指令。

以下语法规则控制 INF 文件的必需内容和可选内容、使用字符串标记的节名称格式以及行格式、延续和注释。

区分大小写

  • 节名称、条目和指令不区分大小写。 例如, versionVERSIONVersion 是 INF 文件中同样有效的节名称规范。

必需和可选内容

  • 任何特定 INF 文件中的必需和可选部分、条目和指令集取决于要安装的设备/驱动程序或组件的类型。

  • 安装任何特定设备及其驱动程序所需的一组节、特定于节的条目和指令也在某种程度上取决于相应的类安装程序(如果存在)。 有关系统提供的类安装程序如何处理特定于设备类型的 INF 文件的详细信息,请参阅 WDK 中的特定于设备类型的文档。

  • 在语法定义中,可选条目由 取消嵌入 的括号 ([,]) 分隔。 另一方面, 粗体 括号 ([]) 是包含它们的条目的必需元素。 在下面的示例中, Version 两边的括号是必需的,而 =类名称 周围的括号指示此项是可选的。

    [Version]
    
    Signature="signature-name"
    [Class=class-name]
    ...
    

节名称

  • 可以按任意顺序指定节。 大多数 INF 文件按约定按特定顺序列出节,但 Windows 按名称而不是按 INF 文件中的位置查找节。

  • INF 文件中的每个节都以括在方括号 ([ ]) 的节名称开头。 节名称可以是系统定义的,也可以是 INF 编写器定义的。

    例如, [Manufacturer] 指定系统命名的 Manufacturer 节的开头,而 [Std.按文 种] 表示特定 INF 编写器定义的 Models 节名称。

    在 Windows 2000 及更高版本的 Windows 上,节名称的最大长度为 255 个字符。

    每个节在新 [section-name] 的开头或文件末尾标记处结束。

  • 如果 INF 文件中的多个节具有相同的名称,系统会将其条目和指令合并到单个节中。

  • 除非它用双引号字符括起来 () ,否则 INF 编写器定义的节名称必须是唯一到 INF 无引号的显式可见字符字符串,不包括具有 INF 特定含义的某些字符。 具体而言,由节项或指令引用的无引号节名称不能有前导空格或尾随空格、换行符、返回字符或任何不可见的控制字符,并且不应包含制表符。 此外,它不能包含括号 ([ ]) 字符、单个百分比 (%) 字符、分号 (;) 或任何内部双引号 () 字符,并且不能将反斜杠 (\) 作为其最后一个字符。

    例如,Std.按 INF 文件条目或指令引用时,Std.对和Std_Mfg是唯一有效的节名称,但 Std;使用内部分号) (,除非用双引号 () 括起来,否则它无效。

    将 INF 编写器定义的节名称指定为 带引号的字符串 将替代前面对引用节名称中的字符描述的大多数限制。 只要 INF 文件中的相应节与此带引号的字符串完全匹配,此类带分隔符的节名称几乎可以包含任何显式或隐式可见字符,但右括号 (]) 。

    例如 ,“;;如果 INF 文件中的相应节声明与其空格和分号字符的双引号内的名称完全匹配,则 Std 机器人 是有效的节名称引用 ,为 [;;Std 编码 ].

使用字符串标记

  • INF 文件中的许多值(包括 INF 编写器定义的节名称)可以表示为 strkey% 形式的%字符串键标记。 在 INF 文件的 INF 字符串 部分中,每个字符串键必须与由一系列显式可见字符组成的字符串值相关联。 如有必要,设置代码会将字符串值转换为 Unicode。

    有关如何定义 %strkey% 标记及其各自值的详细信息,请参阅 INF 字符串部分的说明。

行格式、延续和注释

  • 节中的每个条目和指令都以返回或换行符结尾。 因此,用于创建 INF 文件的文本编辑器不得在编辑器确定的任意字符数之后插入回车符或换行符。

  • 反斜杠字符 (\) 可用作条目或指令中的显式行连续符。 但是,路径规范中也使用反斜杠字符。 若要确保路径规范中显示的反斜杠字符不会被错误地解释为行连续符,请使用以下策略:

    • 对于跨越两行的指令,其中一行是包含反斜杠的条目,请使用引号分隔包含反斜杠的条目。

      CopyFiles = "SomeDirectory\"\
      ,SomeFile
      
    • 避免按以下示例所示的方式使用反斜杠字符。 Windows 忽略第一个反斜杠,并将第二个反斜杠解释为行连续符。

      CopyFiles = SomeDirectory\\
      ,SomeFile
      
    • 以下语法有效,等效于 CopyFiles = "SomeDirectory\",SomeFile ; comment

      CopyFiles = "SomeDirectory\"\ ; comment 
      ,SomeFile
      

      因为忽略分号后面的文本, CopyFiles = "SomeDirectory\" ; comment ,SomeFile 因此 不起作用。

  • 注释以分号 (开头 ;) 字符。 分析和解释 INF 文件时,系统会假定以下内容与安装过程无关:

    • 同一行中分号后面的任何字符,除非分号出现在 带引号的字符串%strkey% 标记中
    • 除换行符或返回字符外不包含任何内容的任何空行
  • 逗号分隔节条目和 指令中提供的值。

    INF 文件条目或指令可以在值列表中间省略可选值,但逗号必须保留。 INF 文件可以省略尾随逗号。

    例如,考虑 SourceDisksFiles 节条目的语法:

    文件名=diskid[[subdir][size]]

    省略 值但提供 size 值的条目必须为这两个值指定逗号分隔符,如以下示例所示:

    文件名=diskid,,size

    INF 文件中省略两个可选值的条目可以采用以下格式:

    文件名=diskid

  • 若要在节条目和指令中提供的值中包含百分比 (%) 字符,请使用另一个百分比字符对百分比字符进行转义。

    例如,请考虑 [add-registry-section] 节中的以下语句:

    HKR,,EventMessageFile,0x00020000,“%%SystemRoot%%\System32\IoLogMsg.dll”

    将使用以下值设置注册表值:

    %SystemRoot%\System32\IoLogMsg.dll

  • 若要在节条目和指令中提供的值中包含双引号 (“) 字符,请使用另一个双引号字符转义双引号字符。 请注意,字符串必须位于 带引号的字符串”内

    例如,请考虑 [add-registry-section] 节中的以下语句:

    HKR,,示例,“显示”示例“字符串

    将使用以下值设置注册表值:

    显示“示例”字符串

INF 大小限制

  • 在字符串替换和包含终止 NULL 字符之前,INF 文件字段的最大长度(以字符为单位)为 4096。

  • 字符串替换后,INF 文件字符串的最大长度(以字符为单位)为 4096,其中包括终止 NULL 字符。

  • 但是,请注意,即插即用 (PnP) 可能会对其识别或使用的某些 INF 文件字段施加更严格的限制,例如设备说明、驱动程序提供程序和设备制造商。