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


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

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

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

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

Поскольку WU не может выполнять программное обеспечение, драйвер обновления встроенного ПО должен передать прошивку для установки через систему Plug and Play (PnP).

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

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

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

    1. Определите устройство, к которому подключен драйвер.
    2. Определите, имеет ли драйвер версию микропрограммы, которая более новая, чем текущая версия прошивки, установленная на оборудовании устройства.
    3. Если требуется обновление встроенного ПО, задайте таймер событий для планирования обновления.
    4. В противном случае ничего не делать, пока драйвер не будет запущен снова.
  • Во время выполнения системы:

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

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

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

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

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

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

Использование Центра обновления 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-файл и двоичный файл, содержащий полезные данные встроенного ПО.

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

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

Лучшие практики

  • В 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.