INF 制造商部分

制造商 ”部分标识可以使用 INF 文件安装的一个或多个设备的制造商。

[Manufacturer]

manufacturer-identifier
[manufacturer-identifier] 
[manufacturer-identifier] 
...

manufacturer-identifier
唯一标识制造商和包含标识制造商设备型号的信息的 INF 部分。 每个 制造商标识符 条目必须存在于单独的行中,并使用以下格式:

manufacturer-name |
%strkey%=models-section-name |
%strkey%=models-section-name [,TargetOSVersion] [,TargetOSVersion] ...  (Windows XP and later versions of Windows)

这些条目的定义如下:

manufacturer-name
标识设备的制造商。 INF 还必须包含同名的相应 INF 模型 部分 。 制造商名称的最大长度(以字符为单位)LINE_LEN。 (以这种方式指定的条目无法本地化。)

strkey
指定一个标记,该标记在表示制造商名称的 INF 文件中是唯一的。 每个此类 %strkey% 令牌都必须在 INF 文件的 INF 字符串部分中 定义。

models-section-name
为 INF 文件中每个制造商 的 INF 模型 部分 指定 INF 编写器定义的名称。 此值在 INF 文件中必须是唯一的,并且必须遵循定义节名称的一般规则。 有关这些规则的详细信息,请参阅 INF 文件的一般语法规则

TargetOSVersion
指定可以使用各种 INF 模型 部分的一个或多个目标操作系统版本。 Windows 选择与执行它的操作系统版本最匹配的 INF 模型 部分。

有关 TargetOSVersion 修饰的说明,请参阅下面的 “备注” 部分以及以下示例 3 中的相关信息。

重要

从 Windows Server 2003 SP1 开始,对于非 x86 目标操作系统版本, INF 文件必须在 INF Manufacturer 节中修饰 models-section-name 条目,以及关联的 INF Models 节名称。 对于基于 x86 的目标操作系统版本,INF 文件中不需要这些平台扩展,但建议使用。

注解

安装一个或多个设备的 INF 文件必须具有 “制造商” 部分。 IHV/OEM 提供的 INF 文件通常只指定本节中的单个条目。 如果指定了多个条目,则每个条目必须位于 INF 的单独一行上。

如创建国际 INF 文件和 INF 字符串部分的参考页中所述,使用 %strkey%=models-section-name 条目简化了 INF 文件的本地化。

如果 INF 文件以 制造商名称 格式指定一个或多个条目,则每个此类条目都会隐式指定 INF 中其他位置的相应 Models 节的名称。

可以将每个系统提供的 INF 文件的 “制造商 ”部分视为目录,因为本部分为 设备设置类设置每个制造商的设备型号的安装。 INF 文件的“ 制造商 ”部分中的每个条目都指定制造商名称的易于本地化的 %strkey% 标记,以及每个制造商的唯一到 INF 模型 部分名称。

可以修饰 Manufacturer 部分中的 models-section-name 条目以指定目标操作系统版本。 可以为不同版本的操作系统指定不同的 INF 模型 部分 。 指定的版本指示使用 INF 模型 部分的操作系统版本。 如果未指定版本,则 Windows 对所有操作系统的所有版本使用指定的 模型 部分。

对于Windows 10版本 1511 的 Windows XP,TargetOSVersion 修饰的格式如下所示:

NT[Architecture][.[OSMajorVersion][.[OSMinorVersion][.[ProductType][.SuiteMask]]]]

从 Windows 10 版本 1607 (内部版本 14310 及更高版本) 开始,TargetOSVersion 修饰的格式如下所示:

NT[Architecture][.[OSMajorVersion][.[OSMinorVersion][.[ProductType][.[SuiteMask][.[BuildNumber]]]]]

每个字段的定义如下:

Nt
指定基于 NT 的目标操作系统。 Windows 2000 及更高版本的 Windows 都是基于 NT 的。

体系结构
标识硬件平台。 如果指定,则必须是 x86ia64amd64armarm64

在 Windows Server 2003 SP1 之前,如果未指定 体系结构 ,则可以将关联的 INF 模型 部分与任何硬件平台一起使用。

从 Windows Server 2003 SP1 开始,必须在非 x86 目标操作系统版本的 INF 模型 部分 名称中指定体系结构。 体系结构在基于 x86 的目标操作系统版本的 INF 模型 部分名称中是可选的,但建议使用。

OSMajorVersion
一个表示操作系统的主版本号的数字。 下表定义了 Windows 操作系统的主版本。

注意

若要区分 INF 文件中的特定Windows 10版本和 11 个版本,需要使用 BuildNumber (请参阅下面的) 。

Windows 版本 主版本
Windows 11 (所有版本) 10
Windows Server 2022 10
Windows Server 2019 10
Windows Server 2016 10
Windows 10 (所有版本) 10
Windows Server 2012 R2 6
Windows 8.1 6
Windows Server 2012 6
Windows 8 6
Windows Server 2008 R2 6
Windows 7 6
Windows Server 2008 6
Windows Vista 6
Windows Server 2003 R2 5
Windows Server 2003 5
Windows XP 5
Windows 2000 5

OSMinorVersion
一个表示操作系统的次版本号的数字。 下表定义了 Windows 操作系统的次要版本。

Windows 版本 次要版本
Windows 11 (所有版本) 0
Windows Server 2022 0
Windows Server 2019 0
Windows Server 2016 0
Windows 10 (所有版本) 0
Windows Server 2012 R2 3
Windows 8.1 3
Windows Server 2012 2
Windows 8 2
Windows Server 2008 R2 1
Windows 7 1
Windows Server 2008 0
Windows Vista 0
Windows Server 2003 R2 2
Windows Server 2003 2
Windows XP 1
Windows 2000 0

ProductType
一个数字,表示 Winnt.h 中定义的VER_NT_xxxx标志之一,如下所示:

0x0000001 (VER_NT_WORKSTATION)

0x0000002 (VER_NT_DOMAIN_CONTROLLER)

0x0000003 (VER_NT_SERVER)

如果指定了产品类型,则仅当操作系统与指定的产品类型匹配时才使用 INF 文件。 如果 INF 支持单个操作系统版本的多个产品类型,则需要多个 TargetOSVersion 条目。

SuiteMask
一个数字,表示 Winnt.h 中定义的一个或多个VER_SUITE_xxxx标志的组合。 这些标志包括以下内容:

0x00000001 (VER_SUITE_SMALLBUSINESS)

0x00000002 (VER_SUITE_ENTERPRISE)

0x00000004 (VER_SUITE_BACKOFFICE)

0x00000008 (VER_SUITE_COMMUNICATIONS)

0x00000010 (VER_SUITE_TERMINAL)

0x00000020 (VER_SUITE_SMALLBUSINESS_RESTRICTED)

0x00000040 (VER_SUITE_EMBEDDEDNT)

0x00000080 (VER_SUITE_DATACENTER)

0x00000100 (VER_SUITE_SINGLEUSERTS)

0x00000200 (VER_SUITE_PERSONAL)

0x00000400 (VER_SUITE_SERVERAPPLIANCE)

如果指定了一个或多个套件掩码值,则仅当操作系统与所有指定的产品套件匹配时才使用 INF。 如果 INF 支持单个操作系统版本的多个产品套件组合,则需要多个 TargetOSVersion 条目。

BuildNumber
一个数字,表示从内部版本 14310 或更高版本开始,该部分适用的 Windows 版本的最小 OS 内部版本号。

假定内部版本号仅相对于某些特定的 OS 主版本/次要版本,并且可能会针对将来的 OS 主版本/次要版本重置。

仅当 TargetOSVersion 的 OS 主/次要版本与当前操作系统 (或 AltPlatformInfo 完全匹配) 版本时,才会计算 TargetOSVersion 修饰指定的任何内部版本号。  如果当前 OS 版本大于 TargetOSVersion 修饰 (OSMajorVersion,OSMinorVersion) 指定的 OS 版本,则无论指定的内部版本号如何,该部分都被视为适用。 同样,如果当前 OS 版本小于 TargetOSVersion 修饰指定的 OS 版本,则部分不适用。

如果提供了内部版本号,则 TargetOSVersion 修饰的 OS 版本和 BuildNumber 必须都大于首次引入此修饰的Windows 10内部版本 14310 的 OS 版本和内部版本号。 例如,没有这些更改的早期版本的操作系统 (Windows 10内部版本 10240) 不会分析未知的修饰,因此尝试以这些早期版本为目标实际上会阻止操作系统认为修饰有效。

下表定义了 Windows 操作系统的内部版本号。

Windows 版本 生成号
Windows 11版本 23H2 22631
Windows 11 版本 22H2 22621
Windows 11 版本 21H2 22000
Windows Server 2022 20348
Windows 10版本 22H2 19045
Windows 10 版本 21H2 19044
Windows 10 版本 21H1 19043
Windows 10 版本 20H2 19042
Windows 10 版本 2004 19041
Windows 10版本 1909 18363
Windows 10 版本 1903 18362
Windows Server 2019 17763
Windows 10 版本 1809 17763
Windows 10 版本 1803 17134
Windows 10版本 1709 16299
Windows 10 版本 1703 15063
Windows Server 2016 14393
Windows 10 版本 1607 14393

有关 TargetOSVersion 修饰的详细信息,请参阅 将平台扩展与操作系统版本组合

重要

强烈建议始终使用 Windows XP 或更高版本 Windows 的目标操作系统的平台扩展来修饰“制造商”和“模型”部分中的 models-section-name 条目。 对于基于 x86 的硬件平台,应避免使用 。NT 平台扩展和使用 。改为 NTx86

如果 INF 包含带有修饰的 “制造商” 部分条目,则它还必须包含具有与操作系统修饰匹配的名称的 INF 模型 部分 。 例如,如果 INF 包含以下 “制造商” 部分:

%FooCorp%=FooMfg, NTx86....0x80、NTamd64

然后 INF 还必须包含以下名称的 INF 模型 部分

  • [FooMfg.NTx86....0x80]

    此名称适用于基于 x86 的硬件平台上的 Windows XP 和更高版本的 Windows 的数据中心套件。

  • [FooMfg.NTamd64]

    此名称适用于基于 x64 的硬件平台上 Windows XP 及更高版本的 Windows 的所有产品类型和套件。

在安装过程中,Windows 按以下方式选择 INF 模型 部分

  1. 如果 Windows 在包含数据中心产品套件的基于 x86 的操作系统 (Windows XP 或更高版本) 运行,则 Windows 选择 [FooMfg.NTx86....0x80]模型 部分。

  2. 如果 Windows 在基于 x64 的操作系统版本中运行, (Windows XP 或更高版本) 任何产品套件,则 Windows 将选择 [FooMfg.NTamd64]Models 部分。

如果 INF 用于 Windows XP 之前的操作系统版本,则它还必须包含名为 [FooMfg] 的未修饰的模型部分。

如果 INF 支持多个制造商,则必须针对每个制造商遵循这些规则。

下面是 TargetOSVersion 修饰的其他示例:

  • %FooCorp% = FooMfg, NTx86

    在此示例中,生成的 INF Models 部分名称为 [FooMfg.NTx86],适用于 Windows XP 或更高版本) (任何 x86 版本的操作系统。

  • %FooCorp% = FooMfg, NT.7.8

    在此示例中,对于 7.8 及更高版本的操作系统,生成的 INF Models 节名称为 [FooMfg.NT.7.8]。 对于早期版本的操作系统(如 Windows XP),使用 [FooMfg.NT]。

安装程序选择要使用的 INF 模型 部分基于以下规则:

  • 如果 INF 包含多个主要或次要操作系统版本号的 INF 模型 部分 ,则 Windows 使用具有最高版本号的部分,该节的版本号不高于进行安装时所在的操作系统版本。

  • 如果与操作系统版本匹配的 INF 模型 部分还包括产品类型和/或产品套件修饰,则 Windows 会选择与正在运行的操作系统最匹配的部分。

例如,假设 Windows 在 Windows XP (版本 5.1) (没有数据中心产品套件)上执行,并在 “制造商 ”部分找到以下条目:

%FooCorp%=FooMfg, NT, NT.5, NT.5.5, NT....0x80

在这种情况下,Windows 会查找名为 [FooMfg.NT.5]INF 模型部分。 如果 Windows XP 在 Datacenter 版本上执行 [FooMfg.NT.5] 部分,则 Windows 还会使用 [FooMfg.NT.5] 部分,因为特定版本号优先于产品类型和套件掩码。

如果希望 INF 显式排除特定的操作系统版本、产品类型或套件,请创建一个空 的 INF 模型 部分。 例如,名为 [FooMfg.NTx86.6.0] 的空部分禁止在基于 x86 的操作系统 6.0 及更高版本上安装。

示例

此示例演示单个 IHV 中 INF 的典型 制造商 部分。

[Manufacturer]
%Mfg%=Contoso,NTamd64        ; Models section == Contoso

[Contoso.NTamd64]

; ...
[Strings]
Mfg = "Contoso, Ltd."

下一个示例演示特定于设备类的安装程序的 INF 典型的 制造商 部分:

[Manufacturer]
%CONTOSO%=Contoso_Section,NTamd64
; several entries omitted here for brevity
%FABRIKAM%=Fabrikam_Section,NTamd64
%ADATUM%=Adatum_Section,NTamd64

以下示例演示特定于 x86 平台、Windows XP 及更高版本的 “制造商 ”部分:

[Manufacturer]
%foo%=foosec,NTx86.5.1

[foosec.NTx86.5.1]

以下示例演示特定于 x64 平台的“制造商”部分,Windows 10内部版本 14393 及更高版本:

[Manufacturer]
%foo%=foosec,NTamd64.10.0...14393

[foosec.NTamd64.10.0...14393]

以下两个示例显示了具有各种特定于 OS 的 INF 模型 部分的框架 INF 文件:

示例 1:

[Manufacturer]
%MyName% = MyName,NTx86.5.1
.
[MyName]
%MyDev% = InstallA,hwid
.
[MyName.NTx86.5.1]
%MyDev% = InstallB,hwid
.
[InstallA]   ; Windows 2000 
.
.
[InstallB]   ; Windows XP and later, x86 only
.

示例 2:

[Manufacturer]
%MyName% = MyName,NTx86.6.0,NTx86.5.1,
.
[MyName.NTx86.6.0] ; Empty section, so this INF does not support
.                  ; NT 6.0 and later.
.
[MyName.NTx86.5.1] ; Used for NT 5.1 and later
.                  ; (but not NT 6.0 and later due to the NTx86.6.0 entry)
%MyDev% = InstallB,hwid
.
[MyName]           ; Empty section, so this INF does not support
.                  ; Win2000
.

示例 3:

[Manufacturer]
%MyMfg% = MyMfg, NTamd64.6.1, NTamd64.10.0, NTamd64.10.0...14310
.
[MyMfg.NTamd64.6.1]          ; Used for Windows 7 and later
.                            ; (but not for Windows 10 and later due to the NT.10.0 entry)
.
[MyMfg.NTamd64.10.0]         ; Used for Windows 10
.                            ; (but not for Windows 10 build 14393 and later due to the NT.10.0...14393 entry)
.
[MyMfg.NTamd64.10.0...14393] ; Used for Windows 10 build 14393 and later
.
.

注意

指定多个 TargetOSVersion 时,请在一个条目中将它们字符串在一起,如本示例所示。 不要将每个目标表示为单独的条目。

另请参阅

将平台扩展与操作系统版本相结合

模型

字符串