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 most updating system firmware, come across Windows UEFI firmware update platform.

To do this, you'll provide an update machinery, implemented as a device driver, that includes the firmware payload. If your device uses a vendor-supplied driver, you accept the pick of adding the firmware update logic and payload to your existing role commuter, or providing a separate firmware update driver package. If your device uses a Microsoft-supplied driver, y'all must provide a dissever firmware update commuter bundle. In both cases, the firmware update driver package must be universal. For more than info almost universal drivers, run across Getting Started with Windows Drivers. The commuter binary can apply KMDF, UMDF 2 or the Windows Driver Model.

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

Firmware update driver actions

Typically, the firmware update driver is a lightweight device commuter that does the post-obit:

  • At device commencement or in the driver'southward EVT_WDF_DRIVER_DEVICE_ADD callback function:

    1. Identify the device to which it is attached.
    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 naught until the commuter is started once more.
  • During organization runtime:

    1. If an update is queued, wait for a set of conditions to exist met.
    2. When conditions are met, perform the firmware update on the device.

Firmware update commuter contents

Typically, the firmware update driver package contains the following:

  • 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 driver

The existing role 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 you want to update the function driver and the firmware update driver separately, create a second device node, on which you volition install the firmware update commuter. The following diagram shows how one device tin have two separate device nodes:

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

In this instance, the function and firmware device nodes must have unlike hardware IDs in lodge to be targeted independently.

In that location are a couple ways to create a 2nd device node. Sure device types have the ability to expose a second device node on ane physical device, such equally USB. You can use this functionality to create a device node targetable past WU, and install a firmware update driver on it. Many device types, nonetheless, exercise not allow 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 can be targeted past Windows Update and install the firmware update driver on information technology. The following snippet from an INF file shows how yous can practice 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 child device will have a hardware ID of SWC\ComponentDeviceId. When installed, this INF creates the following device hierarchy:

Parent device, primary device, AddComponent device.

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

Adding firmware update logic to a Microsoft-supplied driver

To update firmware for devices that use a Microsoft-supplied commuter, you demand to create a second device node, as shown above.

Best practices

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

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

    PnP resolves this location when it installs the device. The driver can 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 driver should walk the device tree relative to itself, not past enumerating all device nodes for a match. A user may take plugged in multiple instances of the device, and the firmware driver should only update the device with which it is associated. Typically, the device node to exist located is the parent or sibling of the device node on which the firmware driver is installed. For instance, in the diagram above with two device nodes, the firmware update commuter can look for a sibling device to detect the office commuter. In the diagram immediately above, the firmware driver can await for the parent device to find the primary device with which it needs to communicate.

  • The driver should be robust to multiple instances of the device being on the organisation, possibly with multiple different firmware versions. For case, at that place may be one instance of the device that has been continued and updated several times; a brand new device may and then be plugged in which is several firmware versions erstwhile. This ways that state (such as current version) must exist stored against the device, and not in a global location.

  • If in that location is an existing method to update the firmware (EXE or co-installer, for instance), y'all can largely reuse the update code inside a UMDF driver.