プラットフォーム拡張機能とオペレーティング システム バージョンを組み合わせる
INF ファイルの INF Manufacturer セクション内で、Windows オペレーティング システムのさまざまなバージョンに固有の INF Models セクションを指定できます。 これらのバージョン固有の Models セクションは、TargetOSVersion 装飾を使用して識別されます。
同じ INF ファイル内で、オペレーティング システムの異なるバージョンに対して、異なる INF Models セクションを指定できます。 指定されたバージョンは、INF Models セクションが使用される対象のオペレーティング システムのバージョンを示します。 バージョンが指定されていない場合、Windows はすべてのオペレーティング システムのすべてのバージョンについて、Models セクションを TargetOSVersion 装飾なしで使用します。
TargetOSVersion 装飾形式
次の例は、Windows XP から Windows 10 バージョン 1511 までの TargetOSVersion 装飾の正しい形式を示しています。
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 ベースです。
アーキテクチャ
ハードウェア プラットフォームを識別します。 Models セクションのアーキテクチャ プラットフォームの装飾の詳細については、「複数のプラットフォームとオペレーティング システムの INF ファイルの作成」を参照してください。
OSMajorVersion
オペレーティング システムのメジャー バージョン番号を表す番号。 Windows オペレーティング システムのメジャー バージョンを一覧表示する表については、INF Manufacturer セクションの OSMajorVersion を参照してください。
OSMinorVersion
オペレーティング システムのマイナー バージョン番号を表す番号。 Windows オペレーティング システムのマイナー バージョンを一覧表示する表については、INF Manufacturer セクションの OSMinorVersion を参照してください。
ProductType
次の例のように、Winnt.h で定義された VER_NT_xxxx フラグのいずれかを表す番号。
0x0000001 (VER_NT_WORKSTATION)
0x0000002 (VER_NT_DOMAIN_CONTROLLER)
0x0000003 (VER_NT_SERVER)
製品の種類が指定されている場合、INF ファイルは、オペレーティング システムが指定された製品の種類と一致する場合にのみ使用されます。 INF ファイルが 1 つのオペレーティング システム バージョンに対して複数の製品の種類をサポートしている場合は、複数の TargetOSVersion エントリが必要です。
SuiteMask
Winnt.h で定義された 1 つ以上の 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)
1 つ以上のスイート マスク値が指定されている場合、INF ファイルは、オペレーティング システムが指定されたすべての製品スイートと一致する場合にのみ使用されます。 INF ファイルが 1 つのオペレーティング システム バージョンに対して複数の製品スイートの組み合わせをサポートしている場合は、複数の TargetOSVersion エントリが必要です。
BuildNumber
セクションが適用される Windows 10 リリースの最小 OS ビルド番号 (ビルド 14310 以降) を指定します。 Windows オペレーティング システムのビルド番号を一覧表示する表については、INF Manufacturer セクションの BuildNumber を参照してください。
ビルド番号は、特定の OS メジャー/マイナー バージョンのみに対して相対的であると見なされ、今後の OS メジャー/マイナー バージョンではリセットされる可能性があります。
TargetOSVersion 装飾によって指定されたビルド番号は、TargetOSVersion の OS メジャー/マイナー バージョンが現在の OS (または AltPlatformInfo) バージョンと正確に一致するときにのみ評価されます。 現在の OS バージョンが TargetOSVersion 装飾によって指定された OS バージョン (OSMajorVersion、OSMinorVersion) より大きい場合、指定されたビルド番号に関係なく、セクションは適用可能と見なされます。 同様に、現在の OS バージョンが TargetOSVersion 装飾によって指定された OS バージョンより小さい場合、セクションは適用されません。
ビルド番号が指定された場合、TargetOSVersion 装飾の OS バージョンと BuildNumber は、両方とも、この装飾が最初に導入された Windows 10 ビルド 14310 の OS バージョンとビルド番号を超えている必要があります。 これらの変更がない以前のバージョンのオペレーティング システム (Windows 10 ビルド 10240 など) は、不明な装飾を解析しないため、これらの以前のビルドをターゲットにしようとすると、OS で装飾が有効と見なされなくなります。
Windows が TargetOSVersion 装飾を処理する方法
デバイスにドライバー パッケージをインストールするとき、Windows は次の手順に従って、INF ファイル内の INF Models セクション を処理します。
1 つ以上の INF Models セクションに TargetOS 装飾がある場合、Windows はホスト オペレーティング システムの属性に最も近い INF Models セクションを選択します。
たとえば、INF Models セクションに ntx86.5.1 の TargetOS 装飾があった場合、ホスト オペレーティング システムが x86 ベースのシステムで Windows XP 以降のバージョンの Windows を実行している場合、Windows はそのセクションを選択します。
同様に、INF Models セクションに nt.6.0 の TargetOS 装飾があった場合、ホスト オペレーティング システムが、サポートされるハードウェア プラットフォーム上の Windows Vista 以降のバージョンの Windows であった場合、Windows はそのセクションを選択します。
INF Models セクションに nt.10.0...14393 の TargetOS 装飾があった場合、ホスト オペレーティング システムが、サポートされるハードウェア プラットフォームで Windows 10 ビルド 14393 以上を実行している場合、Windows はそのセクションを選択します。
いずれの INF Models セクション にもホスト オペレーティング システムに一致する TargetOS 装飾がなかった場合、Windows は、プラットフォーム拡張機能が一致するか、プラットフォーム拡張機能のない Models セクションを選択します。
たとえば、INF Models セクションに ntx86 のプラットフォーム拡張機能があった場合、ホスト オペレーティング システムが x86 ベースのシステム上の Microsoft Windows 2000 以降のバージョンの Windows の場合、Windows はそのセクションを選択します。
一致する INF Models セクションが見つからない場合、Windows は、そのドライバー パッケージをデバイスにインストールしません。
TargetOsVersion 装飾の解決方法
適用可能な INF Models セクションを判断するとき、評価は INF Manufacturer セクション内で行ごとに実行されます。特定の OS バージョンについて、適用可能なセクションが各行に最大 1 つ含まれます。
次の INF の抜粋は例を示しています。[ExampleModelsSection_1.NTamd64.10.0...17134] は、Windows ビルド番号 17134 以上で選択され、[ExampleModelsSection_1.NTamd64.10.0...17134] と [ExampleModelsSection_2.NTamd64.10.0...22000] は両方とも、Windows ビルド番号 22000 以上で選択します。
[Manufacturer]
%ManufacturerName% = ExampleModelsSection_1,NTamd64.10.0...17134
%ManufacturerName% = ExampleModelsSection_2,NTamd64.10.0...22000
次の INF の抜粋は例を示しています。[ExampleModelsSection_1.NTamd64.10.0...17134] は、Windows ビルド番号 17134 以上で選択され、[ExampleModelsSection_1.NTamd64.10.0...22000] は、Windows ビルド番号 22000 以上で選択されます。
[Manufacturer]
%ManufacturerName% = ExampleModelsSection_1,NTamd64.10.0...17134,NTamd64.10.0...22000
TargetOSVersion 装飾を含むサンプルの INF Models セクション
特定の 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]
...
1 つの 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 の抜粋は、ドライバー パッケージが OS バージョンごとに異なるインストール手順を実行する必要があることを指定する方法を示しています。
[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]
...