Updating Device Firmware using Windows Update

This topic describes how to update a removable or in-chassis device's firmware using the Windows Update (WU) service. For information virtually updating system firmware, see Windows UEFI firmware update platform.

To do this, you'll provide an update mechanism, implemented as a device driver, that includes the firmware payload. If your device uses a vendor-supplied commuter, y'all have the option of adding the firmware update logic and payload to your existing function driver, or providing a split firmware update driver package. If your device uses a Microsoft-supplied driver, you must provide a separate firmware update driver package. In both cases, the firmware update driver bundle must exist universal. For more info about universal drivers, see Getting Started with Windows Drivers. The driver binary can employ KMDF, UMDF ii or the Windows Commuter Model.

Because WU cannot execute software, the firmware update driver must hand the firmware to Plug and Play (PnP) for installation.

Firmware update driver deportment

Typically, the firmware update commuter is a lightweight device driver that does the following:

  • At device start or in the driver's EVT_WDF_DRIVER_DEVICE_ADD callback function:

    1. Identify the device to which it is fastened.
    2. Determine whether the commuter has a firmware version that is more recent than the version on the firmware currently flashed on device hardware.
    3. If a firmware update is necessary, set an event timer to schedule the update.
    4. Otherwise, do nothing until the driver is started again.
  • During arrangement runtime:

    1. If an update is queued, wait for a set up of weather condition to be met.
    2. When atmospheric condition are met, perform the firmware update on the device.

Firmware update driver contents

Typically, the firmware update driver package contains the post-obit:

  • Universal Driver INF
  • Driver catalog
  • Function driver (.sys or .dll)
  • Firmware update payload binary

Submit your firmware update package as a dissever driver submission.

Adding firmware update logic to a vendor-supplied commuter

The existing function driver can implement the firmware update mechanism, as shown in the following diagram:

Using Windows Update to deliver firmware update via existing function driver.

Alternatively, if yous want to update the function driver and the firmware update driver separately, create a second device node, on which you lot volition install the firmware update driver. The following diagram shows how one device can have ii separate device nodes:

Using Windows Update to deliver firmware update via separate device node.

In this example, the function and firmware device nodes must have different hardware IDs in order to be targeted independently.

There are a couple ways to create a second device node. Sure device types have the ability to expose a 2nd device node on one physical device, such as USB. You can use this functionality to create a device node targetable by WU, and install a firmware update driver on it. Many device types, however, do non let a unmarried physical device to enumerate more than one device node.

In this case, use an extension INF that specifies the AddComponent directive to create a device node that tin can be targeted by Windows Update and install the firmware update driver on it. The following snippet from an INF file shows how you can exercise this:

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

In the above INF sample, ComponentIDs = ComponentDeviceId indicates that the kid device will accept a hardware ID of SWC\ComponentDeviceId. When installed, this INF creates the following device hierarchy:

Parent device, primary device, AddComponent device.

For futurity firmware updates, update the INF and binary file containing the firmware payload.

Adding firmware update logic to a Microsoft-supplied commuter

To update firmware for devices that use a Microsoft-supplied commuter, yous need to create a 2d device node, every bit shown above.

Best practices

  • In your firmware update driver INF, specify DIRID 13 to cause PnP to get out the files in the driver package in the DriverStore:

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

    PnP resolves this location when it installs the device. The driver tin and then open this registry central to determine the location of the payload.

  • Firmware update drivers should specify the following INF entries:

                      Class=Firmware ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}                                  
  • To locate another device node, the firmware commuter should walk the device tree relative to itself, non by enumerating all device nodes for a friction match. A user may take plugged in multiple instances of the device, and the firmware driver should but update the device with which it is associated. Typically, the device node to be located is the parent or sibling of the device node on which the firmware driver is installed. For example, in the diagram above with two device nodes, the firmware update commuter tin look for a sibling device to find the function driver. In the diagram immediately above, the firmware commuter can look for the parent device to notice the primary device with which information technology needs to communicate.

  • The driver should be robust to multiple instances of the device existence on the system, perhaps with multiple dissimilar firmware versions. For case, there may be one case of the device that has been connected and updated several times; a brand new device may then exist plugged in which is several firmware versions quondam. This ways that land (such every bit current version) must exist stored against the device, and non in a global location.

  • If there is an existing method to update the firmware (EXE or co-installer, for example), you can largely reuse the update code within a UMDF driver.