結合平臺擴充功能與操作系統版本
在 INF 檔案的 INF 製造商區段中 ,您可以提供各種 Windows 作業系統版本專屬的 INF 模型 區段 。 這些版本特定的 模型 區段是使用 TargetOSVersion 裝飾來識別。
在相同的 INF 檔案中,可以針對不同版本的作業系統指定不同的 INF 模型 區段 。 指定的版本表示將使用 INF 模型 區段的目標作業系統版本。 如果未指定任何版本,Windows 會針對所有作業系統的所有版本使用沒有 TargetOSVersion 裝飾的 Models 區段。
TargetOSVersion 裝飾格式
下列範例顯示 Windows XP 的 TargetOSVersion 裝飾透過 1511 版 Windows 10 的正確格式:
nt[Architecture][.[OSMajorVersion][.[OSMinorVersion][.[ProductType][.[SuiteMask]]]]]
從 Windows 10 版本 1607 (組建 14310 和更新版本) 開始,TargetOSVersion 裝飾的正確格式包括 BuildNumber:
nt[Architecture][.[OSMajorVersion][.[OSMinorVersion][.[ProductType][.[SuiteMask]][.[BuildNumber]]]]]
每個欄位的定義如下:
Nt
指定目標作業系統是以 NT 為基礎。 Windows 2000 和更新版本的 Windows 都是以 NT 為基礎。
架構
識別硬體平臺。 如需 模型 上架構平臺裝飾的詳細資訊,請參閱 建立多個平臺和操作系統的 INF 檔案。
OSMajorVersion
代表操作系統主要版本號碼的數位。 如需列出 Windows 操作系統主要版本的數據表,請參閱 INF 製造商中的 OSMajorVersion 一節。
OSMinorVersion
代表操作系統次要版本號碼的數位。 如需列出 Windows 操作系統次要版本的數據表,請參閱 INF 製造商中的 OSMinorVersion 一節。
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 10 版本的最低 OS 組建編號。 如需列出 Windows 操作系統組建編號的數據表,請參閱 INF 製造商中的 BuildNumber 一節。
組建編號假設只相對於某些特定的OS主要/次要版本,而且可能會針對某些未來的OS主要/次要版本重設。
只有在 TargetOSVersion 的 OS 主要/次要版本完全符合目前的 OS (或 AltPlatformInfo) 版本時,才會評估 TargetOSVersion 裝飾所指定的任何組建編號。 如果目前的OS版本大於 TargetOSVersion 裝飾所指定的 OS 版本, (OSMajorVersion,OSMinorVersion) ,則不論指定的組建編號為何,區段都會被視為適用。 同樣地,如果目前的OS版本小於 TargetOSVersion 裝飾所指定的 OS 版本,則區段不適用。
如果提供組建編號,則 TargetOSVersion 裝飾的 OS 版本和 BuildNumber 必須大於第一次引進此裝飾之 Windows 10 組建 14310 的 OS 版本和組建編號。 例如,Windows 10 組建 10240) 不會剖析未知裝飾,因此嘗試以這些舊版的 (操作系統為目標實際上會防止 OS 考慮裝飾有效。
Windows 如何處理 TargetOSVersion 裝飾
當您在裝置上安裝驅動程式套件時,Windows 會遵循下列步驟來處理 INF 檔案內的 INF 模型 區段 :
如果一或多個 INF 模型 區段 具有 TargetOS 裝飾,Windows 會選取最接近主機操作系統屬性的 INF 模型 區段。
例如,如果 INF Models 區段具有 ntx86.5.1 的 TargetOS 裝飾,則如果主機操作系統在 x86 型系統上執行 Windows XP 或更新版本的 Windows,Windows 會選取該區段。
同樣地,如果 INF 模型區段具有 nt.6.0的 TargetOS 裝飾,則如果主機操作系統在任何支援的硬體平臺上是 Windows Vista 或更新版本的 Windows,Windows 會選取該區段。
如果 INF 模型區段具有 nt.10.0 的 TargetOS 裝飾...14393,如果主機操作系統在任何支援的硬體平台上執行等於或大於 14393 的組建 Windows 10,Windows 會選取該區段。
如果沒有任何 INF 模型 區段 具有符合主機操作系統的 TargetOS 裝飾,Windows 會選取具有相符平臺延伸模組或沒有平臺延伸模組的 Models 區段。
例如,如果 INF 模型 區段具有 ntx86 的平臺擴充功能,則如果主機操作系統是 x86 型系統上的 Microsoft Windows 2000 或更新版本的 Windows,Windows 會選取該區段。
如果 Windows 找不到相符 的 INF 模型 區段,它就不會在該裝置上安裝該驅動程式套件。
如何解析 TargetOsVersion 裝飾
判斷適用的 INF 模型 區段時,評估會在 INF 製造商區段內每行執行,其中,針對指定的 OS 版本,每一行最多可以有一個適用的區段。
下列 INF 摘錄顯示範例,其中 [ExampleModelsSection_1.NTamd64.10.0...17134] 將會在等於或大於 17134 的 Windows 組建編號上選取 ,而且兩 者 都會選取 [ExampleModelsSection_1.NTamd64.10.0...17134] 和 [ExampleModelsSection_2.NTamd64.10.0...22000] 將會在等於或大於 22000 的 Windows 組建編號上選取。
[Manufacturer]
%ManufacturerName% = ExampleModelsSection_1,NTamd64.10.0...17134
%ManufacturerName% = ExampleModelsSection_2,NTamd64.10.0...22000
下列 INF 摘錄顯示範例,其中 [ExampleModelsSection_1.NTamd64.10.0...17134] 將會在等於或大於 17134 的 Windows 組建編號上選取,以及 [ExampleModelsSection_1.NTamd64.10.0...22000] 將會在等於或大於 22000 的 Windows 組建編號上選取。
[Manufacturer]
%ManufacturerName% = ExampleModelsSection_1,NTamd64.10.0...17134,NTamd64.10.0...22000
具有 TargetOSVersion 裝飾的範例 INF 模型區段
套用至特定 OS 版本和更新版本
此 INF 摘錄說明如何指定驅動程式套件僅適用於特定 OS 版本和更新版本。
[Manufacturer]
%ManufacturerName% = ExampleModelsSection,NTamd64.10.0...17134
; This driver package applies to Windows 10 1803 (build 17134) and later only
[ExampleModelsSection.NTamd64.10.0...17134]
%DeviceDesc%=ExampleInstallSection,ExampleHardwareId
[ExampleInstallSection]
...
僅適用於單一 OS 版本
此 INF 摘錄說明如何指定驅動程式套件僅適用於單一 OS 版本。
[Manufacturer]
%ManufacturerName% = ExampleModelsSection,NTamd64.10.0...17134,NTamd64.10.0...17763
; This driver package applies to Windows 10 1803 (build 17134)
[ExampleModelsSection.NTamd64.10.0...17134]
%DeviceDesc%=ExampleInstallSection,ExampleHardwareId
; However, this driver package does nothing on Windows 10 1809 (build 17763) and later
[ExampleModelsSection.NTamd64.10.0...17763]
; intentionally left empty
[ExampleInstallSection]
...
套用至具有不同設定的多個OS版本
此 INF 摘錄說明如何指定驅動程式套件應該針對不同的作業系統版本進行不同的安裝指示。
[Manufacturer]
%ManufacturerName% = ExampleModelsSection,NTamd64.6.1,NTamd64.10.0
; This driver package applies to Windows 7 and later
[ExampleModelsSection.NTamd64.6.1]
%DeviceDesc%=ExampleInstallSection_Win7,ExampleHardwareId
; However, this driver package has different installation instructions on Windows 10 and later
[ExampleModelsSection.NTamd64.10.0]
%DeviceDesc%=ExampleInstallSection_Win10,ExampleHardwareId
[ExampleInstallSection_Win7]
...
[ExampleInstallSection_Win10]
...