INF Strings 节

INF 文件必须至少有一个 Strings 节,才能定义该 INF 中其他位置指定的每个 %strkey% 标记。

[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""
 ...

strkey1strkey2, ...
INF 文件中的每个字符串键必须指定由字母、数字和/或其他显式可见字符组成的唯一名称。 此类 strkey 标记中的 % 字符必须表示为 %%

某些字符串 | some string
指定一个字符串,可以选择使用双引号字符 (“) 分隔,其中包含字母、数字、标点符号,甚至可能包含某些隐式可见字符,尤其是内部空格和/或制表符。 但是,未带引号的字符串不能包含内部双引号 (“) 、分号 (;) 、换行、返回或任何不可见的控制字符,并且不能将反斜杠 () 作为其最后一个字符。

* string-with-leading-or-trailing-whitespace* |

very-long-multiline-string |

string-with-semicolon |

string-end-in-backslash |

”double-quoted-string-value“
为 %strkey% 标记指定的值 必须 括在双引号 (“) (如果它满足以下任一条件):

  • 如果指定的字符串具有前导空格或尾随空格,必须将其保留为其值的一部分,则必须将该字符串括在双引号字符中,以防止其前导空格和/或尾随空格被 INF 分析程序丢弃。

  • 如果由于文本编辑器中的换行,长字符串可能包含任何内部换行符或返回字符,则还应将其括在双引号中,以防止在初始内部换行符或返回字符处截断字符串。

  • 如果此类字符串包含分号,则必须将其括在双引号中,以防止字符串在分号处被截断。 (如 INF 文件的一般语法规则中所述,分号字符以 INF 文件中的每个注释开头。)

  • 如果此类字符串以反斜杠结尾,则必须用双引号引起来防止字符串与下一个条目连接。 (如 INF 文件的一般语法规则中所述,反斜杠字符 () 用作 INF 文件中的行连续符。)

  • 与无引号字符串规范一样,此类“带引号的字符串”不能包含内部双引号字符。 但是,可以通过使用一个或多个附加双引号字符对 ((例如“”some string“”) )将其指定为显式双引号字符串值。

    INF 分析程序不仅放弃本节中任何“带引号的字符串”的最外层双引号对,而且还会将每个后续连续的双引号对压缩为一个单双引号字符。

    例如,“”“some string”“”在分析时也变为“some string”。

总之,如果满足以下任一条件,则必须将任何字符串括在一对双引号字符 (“) 中:

  • 字符串包含前导空格或尾随空格。
  • 字符串太长,行换行。
  • 字符串包含分号或最后一个反斜杠字符。
  • 字符串本身是带引号的字符串。

系统 INF 分析程序丢弃分隔此类字符串的最外层双引号字符对,以及双引号字符串分隔符之外的任何前导或尾随空格字符。

注解

由于系统 INF 分析程序从定义 %strkey% 标记的任何引号字符串”中去除最外侧的双引号对,因此许多系统 INF 文件将所有 %strkey% 标记定义为引号字符串,以避免 INF 分析期间前导空格和尾随空格意外丢失。 使用 带引号的字符串还可以确保无法截断跨行的特别长字符串值,并且不能将带有结束反斜杠的字符串连接到 INF 文件中的下一行。

若要创建单个国际 INF 文件,INF 可以具有一组特定于区域设置的 字符串。LanguageID 部分,如形式语法语句中所示。 LanguageID 扩展是一个 4 位十六进制值, (没有前导“0x”) ,定义如下:

  • 较低的 10 位包含主要语言 ID,接下来的 6 位包含由 Winnt.h 中定义的 MAKELANGID 宏指定的子语言 ID。
  • 语言和子语言 ID 必须与 Winnt.h 中定义的 Win32 LANG_XXX 和 SUBLANG_XXX 常量的系统定义值匹配。

例如, LanguageID 值为 0407 表示主要语言 ID LANG_GERMAN (07) ,子语言 ID 为 SUBLANG_GERMAN (01) ,如以下示例所示:

[Strings]              ; No language ID implies English
DiskName="My Excellent Software"
LocaleSubDir="English"

[Strings.0407]         ; 0407 is the language ID for German
DiskName="Meine ausgezeichnete Software"
LocaleSubDir="German"

INF 文件只能包含一个 Strings 节以及一个 String。每个 LanguageID 值的 LanguageID 部分。

Windows 选择用于转换安装的所有 %strkey% 令牌的单个字符串部分。 根据特定计算机的当前区域设置,Windows 按以下方式选择 “字符串 ”部分:

  1. Windows 首先查找 INF 中与分配给计算机的当前区域设置匹配的 LanguageID 值。 如果找到完全匹配项,则 Windows 将使用该 字符串。LanguageID INF 部分,用于转换 INF 中定义的所有 %strkey% 标记。

    需要复制所有字符串中的所有 字符串标记。* 节,甚至不需要本地化的数值/固定常量。

  2. 否则,Windows 接下来会查找与 LANG_XXX 值的匹配项,值为 SUBLANG_NEUTRAL 作为SUBLANG_XXX。 如果找到此类匹配项,Windows 将使用该 INF 部分来转换 INF 中定义的所有 %strkey% 标记。

  3. 否则,Windows 接下来会查找与 LANG_XXX 值的匹配项,以及同一个 LANG_XXX 系列的任何有效SUBLANG_XXX 。 如果找到此类部分匹配项,请使用该 字符串。LanguageID INF 部分,用于转换 INF 中定义的所有 %strkey% 标记。

  4. 否则,Windows 将使用未修饰 的字符串 部分来转换 INF 中定义的所有 %strkey% 标记。

按照惯例,为了方便为国际市场创建一组 INF 文件, 字符串 部分在所有系统 INF 文件中是最后一个部分。 对 INF 中的所有用户可见字符串值使用 %strkey% 标记,并将其放置在每个区域设置 的字符串 部分中,可简化此类字符串的转换。 有关特定于区域设置的 INF 文件的详细信息,请参阅 创建国际 INF 文件

尽管 Strings 节是每个 INF 文件中的最后一个部分,但在 Strings 节中定义的任何指定的 %strkey% 标记都可以在 INF 中的其他位置重复使用,尤其是当需要该标记的已翻译值时。 SetupAPI 函数将每个 %strkey% 标记扩展为指定的字符串,然后使用该扩展值进行进一步的 INF 处理。

INF 文件中 %strkey% 标记的使用不限于用户可见的字符串值。 只要每个标记在 Strings 节中定义,就可以以对 INF 编写器方便的任何方式使用这些令牌。 例如,在编写需要指定多个 GUID 的 INF 文件时,使用有意义的名称作为每个此类 GUID 值的替代项,为每个 GUID 创建 %strkey% 令牌可能很方便。

在 INF 文件的 Strings 节中指定一组 %strkey% = “{GUID}” 值,只需键入每个显式 GUID 值一次。 与在整个 INF 文件中使用显式 GUID 值相比,这有助于提供更具可读性的内部 INF 文档。

所有 %strkey% 标记都必须在引用它们的 INF 文件中定义。 因此,对于包含 IncludeNeeds 条目的任何 INF 文件,包含的 INF 必须具有其自己的 Strings 部分,以定义该 INF 中引用的所有 %strkey% 标记。

在 INF 字符串 部分中,替换字符串(包括终止 NULL 字符)的最大长度为 4096( (Windows Vista 及更高版本的 Windows) )和 512 (Windows Server 2003、Windows XP 和 Windows 2000) 。 字符串替换后,INF 文件字符串的最大长度(以字符为单位)为 4096,包括终止 NULL 字符。

示例

以下示例演示系统提供的特定于区域设置的 dvd.inf字符串部分的片段,该片段适用于英语国家/地区中的安装。

[Strings]
Msft="Microsoft"
MfgToshiba="Toshiba"
Tosh404.DeviceDesc="Toshiba DVD decoder card"
; ... 

以下示例演示字符串串联。

[OEM Windows System Component Verification]
OID = 1.3.6.1.4.1.311.10.3.7    ; WHQL OEM OID 
Notice = "%A% %B% %C% %D% %E%" 
[Strings]
A = "This certificate is used to sign untested drivers that have not passed the Windows Hardware Quality Labs (WHQL) testing process."
B = "This certificate and drivers signed with this certificate are intended for use in test environments only, and are not intended for use in any other context."
C = "Vendors who distribute this certificate or drivers signed with this certificate outside a test environment may be in violation of their driver signing agreement."
D = "Vendors who have their drivers signed with this certificate do so at their own risk." 
E = "In particular, Microsoft assumes no liability for any damages that may result from the distribution of this certificate or drivers signed with this certificate outside the test environment described in a vendor's driver signing agreement."

另请参阅

DDInstall

DDInstall。CoInstallers

DDInstall。硬件

DDInstall。接口

DDInstall。服务

制造商

InterfaceInstall32

模型

SourceDisksNames

版本