Создание нового драйвера-примитива
Используйте примитивный драйвер для обработки и управления программным обеспечением, которое использует установку на основе INF, но не обязательно привязано к определенному аппаратному устройству.
Предыстория и преимущества примитивных драйверов
До Windows 10 версии 1903 некоторые типы программного обеспечения, которые использовали установку на основе INF, но не обязательно были привязаны к определенному аппаратному устройству, не полностью поддерживались ОС. Хотя эти компоненты программного обеспечения использовали INF-файлы в качестве манифеста для установки, ОС не знала об этом сценарии напрямую и не поддерживала его встроенную обработку.
Поскольку эти элементы программного обеспечения не были привязаны к аппаратному устройству, они будут устанавливаться во всей системе независимо от оборудования. В результате не было никакой гарантии, что эти компоненты программного обеспечения были правильно установлены, удалены или обработаны при обновлении ОС.
Начиная с Windows 10 версии 1903, платформа Plug and Play обрабатывает и управляет этим типом программного пакета как сущность верхнего уровня, что повышает надежность и гарантирует надлежащее поведение такого программного обеспечения, особенно во время сценариев обновления и сброса ОС.
Типы программного обеспечения, которые используют эту новую поддержку платформы, называются примитивными драйверами. Примитивные драйверы продолжают использовать установку на основе INF, а базовая платформа использует хранилище драйверов для отслеживания всех соответствующих файлов.
Базовая платформа Plug and Play затем корректно устанавливает, удаляет и поддерживает состояние драйвера при обновлении ОС.
По сути, эти INF управляются по-разному. Ранее [DefaultInstall] (а часто и [DefaultUninstall]) обрабатывались программой SetupAPI в стиле скрипта, где INF использовался в качестве манифеста и SetupAPI выполнял инструкции в соответствующих разделах от имени вызывающего объекта.
Для отмены изменений (для выполнения удаления) необходимо указать раздел INF, который выполнил противоположный набор инструкций в качестве раздела установки. Однако примитивные драйверы с использованием INF не требуют раздела удаления.
Примитивные драйверы используют те же API установки и удаления, что и драйверы устройств, где API удаления будет выполнять обратный набор операций в качестве операции установки, а действие установки или удаления пакета драйверов будет обрабатывать эти разделы.
Требования INF для доступа к примитивным функциям драйвера
Раздел Версия должен быть полным, как и для драйверов PnP.
Необходимо указать директиву Provider .
Необходимо заполнить директиву Class .
Необходимо заполнить директиву ClassGuid .
Драйвер должен быть совместим с DCH.
Раздел [Изготовитель] не может присутствовать.
Разделы [DefaultInstall] должны быть украшены архитектурой, и не могут присутствовать неоконченные версии.
Правильно: [DefaultInstall.NTamd64]
Неправильно: [DefaultInstall]
[DefaultUninstall] может не присутствовать в INF-файле (см . устаревшую совместимость для исключения).
Примитивные драйверы, предназначенные только Windows 10 версии 1903 и более поздних
Примитивные драйверы, предназначенные только для Windows 10 версии 1903 и более поздних версий, должны использовать DiInstallDriver и DiUninstallDriver для правильной установки и удаления программного обеспечения в хранилище драйверов или из хранилища драйверов.
Драйверы также должны использовать Dirid 13 , чтобы правильно указать хранилище драйверов в качестве нужного назначения для установки.
Устаревшая совместимость
Хотя параметр [DefaultUninstall] запрещен в примитивных драйверах, создается исключение для обеспечения совместимости ОС нижнего уровня. В Windows введена директива INF, которая заставляет версию ОС, поддерживающую примитивные драйверы, игнорировать раздел [DefaultUninstall]. Если пакету драйверов требуется поддержка версий ОС нижнего уровня, добавьте следующий синтаксис, чтобы платформа правильно обрабатывала такие случаи:
[DefaultUninstall.NTamd64]
LegacyUninstall=1
Разделы [DefaultInstall] и [DefaultUninstall] по-прежнему должны быть украшены архитектурой; Однако, включив LegacyUninstall=1
, Windows игнорирует раздел [DefaultUninstall] (в Windows 10 версии 1903 и более поздних). Таким образом, вы можете включить этот раздел в inf, где его можно использовать на нижнем уровне с устаревшим приложением установки и удаления, чтобы удалить пакет драйвера примитива.
Начиная с Windows 10 версии 1903, если вы передаете раздел [DefaultInstall] или [DefaultUninstall] в API InstallHInfSection в setupapi.dll, пакет драйвера будет проверен, чтобы определить, поддерживает ли он примитивную функциональность драйвера. Если он поддерживает примитивную функциональность драйвера, а не обрабатывает указанный раздел в устаревшем режиме, INF-файл передается в DiInstallDriver или DiUninstallDriver соответствующим образом. Таким образом, один установщик может использовать примитивные драйверы в совместимых версиях ОС и поддерживать поддержку предыдущих версий ОС.
Преобразование из INF драйвера устройства
Преобразование INF-файла, использующего [Manufacturer], в значение , использующее [DefaultInstall], требует внесения незначительных изменений в INF-файл. В отличие от раздела [Manufacturer], раздел [DefaultInstall] является одновременно точкой входа и разделом установки. Это концептуально объединяет раздел [Manufacturer], [Models] и [DDInstall] в один.
Следующий INF-код получит ошибку 1297 в InfVerif , так как он не устанавливается на каком-либо оборудовании:
[Manufacturer]
%Company% = Driver, NTx86, NTamd64
[Driver.NTx86]
%DeviceDesc% = InstallSection_32,
[Driver.NTamd64]
%DeviceDesc% = InstallSection_64,
[InstallSection_64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg
[InstallSection_64.Services]
AddService = MyService,, MyService_Install
[InstallSection_32]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg
[InstallSection_32.Services]
AddService = MyService,, MyService_Install
Приведенный выше INF-файл можно преобразовать в inf-файл на основе [DefaultInstall], как показано ниже.
[DefaultInstall.NTamd64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg
[DefaultInstall.NTamd64.Services]
AddService = MyService,, MyService_Install
[DefaultInstall.NTx86]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg
[DefaultInstall.NTx86.Services]
AddService = MyService,, MyService_Install