Объединение расширений платформы с версиями операционной системы

В разделе Inf Manufacturer (Производитель INF ) INF-файла можно предоставить разделы модели INF , относящиеся к различным версиям операционной системы Windows. Эти разделы моделей для конкретных версий идентифицируются с помощью оформления TargetOSVersion .

В одном INF-файле можно указать разные разделы модели INF для разных версий операционной системы. Указанные версии указывают версии целевой операционной системы, с которыми будут использоваться разделы модели INF. Если версии не указаны, Windows использует раздел Models без оформления TargetOSVersion для всех версий всех операционных систем.

Формат оформления TargetOSVersion

В следующем примере показан правильный формат оформления TargetOSVersion для Windows XP до Windows 10 версии 1511:

nt[Architecture][.[OSMajorVersion] [.[OSMinorVersion] [.[Тип продукта] [.[SuiteMask]]]]]

Начиная с Windows 10 версии 1607 (сборка 14310 и более поздние версии), правильный формат оформления TargetOSVersion включает buildNumber:

nt[Architecture][.[OSMajorVersion] [.[OSMinorVersion] [.[Тип продукта] [.[SuiteMask]] [.[BuildNumber]]]]]

Каждое поле определяется следующим образом:

Nt
Указывает, что целевая операционная система основана на NT. Windows 2000 и более поздние версии Windows основаны на NT.

Архитектура
Определяет аппаратную платформу. Дополнительные сведения об оформлении архитектуры платформ в разделах Модели см. в разделе Создание ФАЙЛОВ INF для нескольких платформ и операционных систем.

OSMajorVersion
Число, представляющее основной номер версии операционной системы. Таблицу с основными версиями для операционных систем Windows см. в разделе OSMajorVersion в разделе Изготовитель INF.

OSMinorVersion
Число, представляющее дополнительный номер версии для операционной системы. Таблицу с дополнительными версиями для операционных систем Windows см. в разделе OSMinorVersion в разделе Изготовитель INF.

Тип продукта
Число, представляющее один из флагов VER_NT_xxxx, определенных в Winnt.h, например:

0x0000001 (VER_NT_WORKSTATION)

0x0000002 (VER_NT_DOMAIN_CONTROLLER)

0x0000003 (VER_NT_SERVER)

Если указан тип продукта, INF-файл будет использоваться только в том случае, если операционная система соответствует указанному типу продукта. Если INF-файл поддерживает несколько типов продуктов для одной версии операционной системы, требуется несколько записей TargetOSVersion .

SuiteMask
Число, представляющее сочетание одного или нескольких флагов VER_SUITE_xxxx, определенных в Winnt.h. К этим флагам относятся следующие:

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
Указывает минимальный номер сборки ОС выпуска Windows 10, к которому относится этот раздел, начиная со сборки 14310 или более поздней версии. Таблицу с номерами сборок для операционных систем Windows см. в разделе BuildNumber in INF Manufacturer.

Предполагается, что номер сборки относится только к определенной основной или дополнительной версии ОС и может быть сброшен для некоторых будущих основных или дополнительных версий ОС.

Любой номер сборки, указанный в оформлении TargetOSVersion , вычисляется только в том случае, если основная или дополнительная версия ОС TargetOSVersion точно соответствует текущей версии ОС (или AltPlatformInfo).  Если текущая версия ОС больше версии ОС, указанной в оформлении TargetOSVersion (OSMajorVersion,OSMinorVersion), раздел считается применимым независимо от указанного номера сборки. Аналогичным образом, если текущая версия ОС меньше версии ОС, указанной в оформлении TargetOSVersion, раздел неприменим.

Если указан номер сборки, версия ОС и номер сборки оформления TargetOSVersion должны быть больше версии ОС и номера сборки Windows 10 сборки 14310, в которой впервые появилось это оформление. Более ранние версии операционной системы без этих изменений (например, Windows 10 сборке 10240) не будут анализировать неизвестные украшения, поэтому попытка нацелиться на эти более ранние сборки фактически не позволит этой ОС считать оформление допустимым.

Как Windows обрабатывает украшения TargetOSVersion

При установке пакета драйверов на устройстве Windows выполняет следующие действия для обработки разделов моделей INF в INF-файле:

  1. Если один или несколько разделов модели INF имеют оформление TargetOS , Windows выбирает раздел Модели INF, ближайший к атрибутам операционной системы узла.

    Например, если раздел Модели INF имеет оформление TargetOSntx86.5.1, Windows выбирает этот раздел, если операционная система узла работает под управлением Windows XP или более поздней версии Windows в системе x86.

    Аналогичным образом, если раздел Модели INF имеет оформление TargetOSnt.6.0, Windows выбирает этот раздел, если ведущая операционная система windows Vista или более поздняя версия Windows на любой поддерживаемой аппаратной платформе.

    Если раздел модели INF имеет оформление TargetOSnt.10.0... 14393, Windows выбирает этот раздел, если операционная система узла выполняет сборку Windows 10, равную или превышающую 14393 на любой поддерживаемой аппаратной платформе.

  2. Если ни один из разделов Модели INF не имеет оформления TargetOS , соответствующего операционной системе узла, Windows выбирает раздел Модели с соответствующим расширением платформы или без расширения платформы.

    Например, если раздел Модели INF имеет расширение платформы ntx86, Windows выбирает этот раздел, если ведущая операционная система — Microsoft Windows 2000 или более поздняя версия Windows в системе x86.

  3. Если Windows не удается найти соответствующий раздел моделей INF, она не установит этот пакет драйверов на устройстве.

Разрешение оформления TargetOsVersion

При определении применимых разделов моделей INF оценка выполняется для каждой строки в разделе Производитель INF, где для конкретной версии ОС каждая строка может содержать до одного применимого раздела.

В приведенном ниже фрагменте 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

Примеры разделов моделей INF с оформлением TargetOSVersion

Применяется к определенной версии ОС и более поздних версий

В этом фрагменте INF показано, как можно указать, что пакет драйвера применяется только к определенной версии ОС и более поздних версий.

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

Применяется только к одной версии ОС

В этом фрагменте INF показано, как можно указать, что пакет драйвера применяется только к одной версии ОС.

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

Применяется к нескольким версиям ОС с разными параметрами

В этом фрагменте 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]
...