Поделиться через


Обновление встроенного ПО устройства с помощью Обновл. Windows

В этой статье описывается обновление встроенного ПО съемных или встроенных устройств с помощью службы Обновл. Windows (WU). Сведения об обновлении встроенного ПО системы см . на платформе обновления встроенного ПО Windows UEFI.

Для этого укажите драйвер устройства, включающий полезные данные встроенного ПО. Если вы предоставляете драйвер функции для устройства, можно добавить логику обновления встроенного ПО и полезные данные в существующий драйвер или предоставить отдельный пакет драйвера обновления встроенного ПО. Если устройство использует предоставленный корпорацией Майкрософт драйвер, необходимо предоставить отдельный пакет драйвера обновления встроенного ПО. В обоих случаях пакет драйвера обновления встроенного ПО должен быть универсальным.

Дополнительные сведения о универсальных драйверах см. в разделе "Использование универсального INF-файла". Двоичный файл драйвера может использовать KMDF, UMDF 2 или модель драйвера Windows.

Так как WU не удается выполнить программное обеспечение, драйвер обновления встроенного ПО должен передать встроенное ПО в самонастраивающийся (PnP) для установки.

Действия драйвера обновления встроенного ПО

Как правило, драйвер обновления встроенного ПО — это упрощенный драйвер устройства, реализующий следующие процедуры:

  • При запуске устройства или в функции обратного вызова драйвера EVT_WDF_DRIVER_DEVICE_ADD :

    1. Определите устройство, к которому он подключен.

    2. Определите, имеет ли драйвер версию встроенного ПО, которая является более последней, чем версия встроенного ПО в настоящее время мигается на оборудовании устройства.

    3. Если требуется обновление встроенного ПО, задайте таймер событий для планирования обновления.

    4. В противном случае ничего не делать, пока драйвер не будет запущен снова.

  • Во время выполнения системы:

    1. Если обновление в очереди, дождитесь выполнения набора условий.

    2. При выполнении условий выполните обновление встроенного ПО на устройстве.

Содержимое драйвера обновления встроенного ПО

Как правило, пакет драйвера обновления встроенного ПО содержит следующие элементы:

  • Универсальный драйвер INF

  • Каталог драйверов

  • Драйвер функции (.sys или .dll)

  • Двоичный файл полезных данных обновления встроенного ПО

Отправьте пакет обновления встроенного ПО в виде отдельной отправки драйвера.

Добавление логики обновления встроенного ПО в драйвер, предоставленного поставщиком

Существующий драйвер функции может реализовать механизм обновления встроенного ПО, как показано на следующей схеме:

Использование Обновл. Windows для доставки обновления встроенного ПО с помощью существующего драйвера функций.

Кроме того, если вы хотите обновить драйвер функции и драйвер обновления встроенного ПО отдельно, создайте второй узел устройства, на котором будет установлен драйвер обновления встроенного ПО. На следующей схеме показано, как одно устройство может иметь два отдельных узла устройства:

Использование Обновл. Windows для доставки обновления встроенного ПО через отдельный узел устройства.

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

Существует несколько способов создания второго узла устройства. Некоторые типы устройств могут предоставлять второй узел устройства на одном физическом устройстве, например USB. Эту функцию можно использовать для создания узла устройства, предназначенного для WU, и установить на него драйвер обновления встроенного ПО. Однако многие типы устройств не позволяют одному физическому устройству перечислять несколько узлов устройств.

В этом случае используйте расширение INF, указывающее директиву AddComponent для создания узла устройства, который может быть предназначен для Обновл. Windows и установки драйвера обновления встроенного ПО на нем. В следующем фрагменте из INF-файла показано, как это сделать:

[Manufacturer]
%Contoso%=Standard,NTamd64
[Standard.NTamd64]
%DeviceName%=Device_Install, PCI\DEVICE_ID
[Device_Install.Components]
AddComponent=ComponentName,,AddComponentSection
[AddComponentSection]
ComponentIDs = ComponentDeviceId

В приведенном выше примере INF указывает, ComponentIDs = ComponentDeviceId что дочернее устройство будет иметь идентификатор SWC\ComponentDeviceIdоборудования. При установке этот INF создает следующую иерархию устройств:

Родительское устройство, основное устройство, AddComponent.

Для будущих обновлений встроенного ПО обновите INF-файл и двоичный файл, содержащий полезные данные встроенного ПО.

Добавление логики обновления встроенного ПО в драйвер, предоставленный корпорацией Майкрософт

Чтобы обновить встроенное ПО для устройств, использующих драйвер, предоставленный корпорацией Майкрософт, необходимо создать второй узел устройства, как показано выше.

Рекомендации

  • В драйвере обновления встроенного ПО укажите DIRID 13 , чтобы PnP оставил файлы в пакете драйверов в DriverStore:

    [Firmware_AddReg]
    ; Store location of firmware payload
    HKR,,FirmwareFilename,,"%13%\firmware_payload.bin"
    

    PnP разрешает это расположение при установке устройства. Затем драйвер может открыть этот раздел реестра, чтобы определить расположение полезных данных.

  • Драйверы обновления встроенного ПО должны указывать следующие записи INF:

    Class=Firmware
    ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
    
  • Чтобы найти другой узел устройства, драйвер встроенного ПО должен ходить по дереву устройства относительно себя, а не перечислять все узлы устройств для сопоставления. Пользователь может подключиться к нескольким экземплярам устройства, и драйвер встроенного ПО должен обновить устройство, с которым он связан. Как правило, узел устройства, который должен находиться, является родительским или братом узла устройства, на котором установлен драйвер встроенного ПО. Например, на схеме выше с двумя узлами устройства драйвер обновления встроенного ПО может найти одноуровневое устройство, чтобы найти драйвер функции. На схеме выше драйвер встроенного ПО может найти родительское устройство, чтобы найти основное устройство, с которым он должен взаимодействовать.

  • Драйвер должен быть надежным для нескольких экземпляров устройства в системе, возможно, с несколькими различными версиями встроенного ПО. Например, может быть один экземпляр устройства, который был подключен и обновлен несколько раз; Новое устройство может быть подключено к нескольким версиям встроенного ПО. Это означает, что состояние (например, текущая версия) должно храниться на устройстве, а не в глобальном расположении.

  • Если существует существующий метод обновления встроенного ПО (EXE или совместного установщика), можно в значительной степени повторно использовать код обновления в драйвере UMDF.