SKU 差分指令

使用 Windows Server 2008 和 Windows Vista SP1 时,内置显示驱动程序 INF 已修改为包含一个新值,该值将驱动程序表示为 “仅限客户端”,这意味着驱动程序不会安装在 Windows 的服务器 SKU 上。 Windows 8 中的所有显示驱动程序都需要此指令。

在 SP1 之前的 Windows Vista 中,使用以下值:

X86:
[Manufacturer]
%ATI% = ATI.Mfg

[ATI.Mfg]

In Vista SP1\Server 2008 the following values were used; 
X86:
[Manufacturer]
%ATI% = ATI.Mfg,NTx86...1

[ATI.Mfg.NTx86...1]

X64:
[Manufacturer]
%ATI% = ATI.Mfg,NTamd64...1

[ATI.Mfg.NTamd64...1]

对于Windows 8,将使用用于 Windows Vista SP1 和 Windows Server 2008 的相同值。

设备驱动程序的 SKU 差异

独立硬件供应商 (IHV) 可以使用 ProductType INF 值来指示给定的 INF 仅对服务器或客户端平台有效。 这适用于 Windows XP 和更高版本的操作系统,并且更改的实现相对简单。

因此,即使服务器系统的驱动程序存储中存在仅限客户端的驱动程序包,该驱动程序也不可安装。

INF 制造商部分主题演示如何添加 TargetOSVersion 以基于各种条件筛选设备安装。 其中一个条件是 ProductType,它可用于指定可以安装包的 SKU 类别。 为 ProductType 定义了以下值:

0x0000001 (VER_NT_WORKSTATION)
0x0000002 (VER_NT_DOMAIN_CONTROLLER)
0x0000003 (VER_NT_SERVER) 

对于任何给定的体系结构,将按以下方式修饰典型 INF 以安装在任何 SKU 上:

[Manufacturer]
%MSFT%=Models,amd64

[Models.NTamd64]
<models entries>

若要将此 INF 限制为仅在客户端上安装,需要向修饰添加“1”的 ProductType。 数字可以表示为十进制或十六进制。 文档显示十六进制,但为了简单起见,我将在本示例中使用十进制。

[Manufacturer]
%MSFT%=Models,amd64...1

; models section for workstation
[Models.NTamd64...1]
<models entries>

对于服务器,语法将其分解为在客户端和普通服务器上安装。 其中每个都有其自己的产品类型。 遗憾的是,INF 语法需要指定这两种情况才能涵盖这两种情况。 因此,需要复制整个模型部分才能真正涵盖服务器 SKU:

[Manufacturer]
%MSFT%=Models,amd64...1amd64...3

; models section for client
[Models.NTamd64...1]
IHV_DeviceName.XXX = "Foo Generic Device Name (Microsoft Corporation - WDDM v1.2)"
IHV_DeviceName.YYY = "Foo Enthusiast Device Name (Microsoft Corporation - WDDM v1.2)"
<models entries>

; models section for Server
[Models.NTamd64...3]
IHV_DeviceName.XXX = "Foo Generic Name (Microsoft Corporation - WDDM v1.2)"
IHV_DeviceName.ZZZ = "Foo Datacenter Name (Microsoft Corporation - WDDM v1.2)"
<models entries>