Partilhar via


Atualizar o firmware do dispositivo usando o Windows Update

Este artigo descreve como atualizar o firmware de um dispositivo removível ou no chassi usando o serviço Windows Update (WU). Para obter informações sobre como atualizar o firmware do sistema, consulte Plataforma de atualização de firmware UEFI do Windows.

Para atualizar o firmware do dispositivo usando o Windows Update, forneça um driver de dispositivo que inclua a carga útil do firmware. Se fornecer um controlador de função para o seu dispositivo, pode adicionar a lógica de atualização de firmware e a carga útil ao controlador existente ou pode fornecer um pacote de controlador de atualização de firmware separado. Se o dispositivo usa um driver fornecido pela Microsoft, você deve fornecer um pacote de driver de atualização de firmware separado. Em ambos os casos, o pacote de driver de atualização de firmware deve ser Universal.

Para obter mais informações sobre drivers universais, consulte Utilizar um ficheiro INF universal. O binário do driver pode usar KMDF,UMDF 2 ou o Modelo de Driver do Windows.

Como a WU não pode executar software, o driver de atualização de firmware deve entregar o firmware ao Plug and Play (PnP) para instalação.

Ações do driver de atualização de firmware

Normalmente, o driver de atualização de firmware é um driver de dispositivo leve que implementa os seguintes procedimentos:

  • No arranque do dispositivo ou na função de callback EVT_WDF_DRIVER_DEVICE_ADD do driver:

    1. Identifique o dispositivo ao qual o driver está conectado.
    2. Determine se o driver tem uma versão de firmware mais recente do que a versão do firmware atualmente instalada no hardware do dispositivo.
    3. Se for necessária uma atualização de firmware, defina um temporizador de eventos para agendar a atualização.
    4. Caso contrário, não faça nada até que o driver seja iniciado novamente.
  • Durante o tempo de execução do sistema:

    1. Se uma atualização estiver na fila, aguarde até que um conjunto de condições seja atendido.
    2. Quando as condições forem atendidas, execute a atualização de firmware no dispositivo.

Conteúdo do driver de atualização de firmware

Normalmente, o pacote de driver de atualização de firmware contém os seguintes itens:

  • Universal Driver INF
  • Catálogo de controladores
  • Função de controlador (.sys ou .dll)
  • Binário do pacote de atualização de firmware

Envie o seu pacote de atualização de firmware num envio de driver separado.

Adicionar lógica de atualização de firmware a um driver fornecido pelo fornecedor

O driver de função existente pode implementar o mecanismo de atualização de firmware, como mostrado no diagrama a seguir:

Usando o Windows Update para fornecer atualização de firmware através do driver de função existente.

Como alternativa, se você quiser atualizar o driver de função e o driver de atualização de firmware separadamente, crie um segundo nó de dispositivo, no qual você instala o driver de atualização de firmware. O diagrama a seguir mostra como um dispositivo pode ter dois nós de dispositivo separados:

Utilizar o Windows Update para fornecer atualizações de firmware através de um nó de dispositivo separado.

Os nós de dispositivo de função e de firmware devem ter IDs de hardware diferentes, para que possam ser direcionados de forma independente.

Há algumas maneiras de criar um segundo nó de dispositivo. Certos tipos de dispositivos têm a capacidade de expor um segundo nó de dispositivo num único dispositivo físico, como por exemplo USB. Você pode usar esta funcionalidade para criar um nó de dispositivo direcionável pelo Windows Update (WU) e instalar um driver de atualização de firmware nele. Muitos tipos de dispositivos, no entanto, não permitem que um único dispositivo físico enumere mais de um nó de dispositivo.

Nesse caso, use uma extensão INF que especifique a diretiva AddComponent para criar um nó de dispositivo direcionado pelo Windows Update e instale o driver de atualização de firmware nele. O seguinte trecho de um arquivo INF mostra como você pode fazer isso:

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

No exemplo INF, ComponentIDs = ComponentDeviceId indica que o dispositivo filho tem uma ID de hardware de SWC\ComponentDeviceId. Quando instalado, este INF cria a seguinte hierarquia de dispositivos:

Dispositivo pai, dispositivo principal, dispositivo AddComponent.

Para futuras atualizações de firmware, atualize o INF e o arquivo binário que contém a carga útil do firmware.

Adicionar lógica de atualização de firmware a um driver fornecido pela Microsoft

Para atualizar o firmware de dispositivos que usam um driver fornecido pela Microsoft, crie um segundo nó de dispositivo, conforme mostrado.

Melhores práticas

  • No driver de atualização de firmware INF, especifique DIRID 13 para fazer com que o PnP deixe os arquivos no pacote de driver no DriverStore:

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

    O PnP determina a localização ao instalar o dispositivo. O driver pode então abrir essa chave do Registro para determinar o local da carga útil.

  • Os drivers de atualização de firmware especificam as seguintes entradas INF:

    Class=Firmware
    ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
    
  • Para localizar outro nó de dispositivo, o driver de firmware deve percorrer a árvore de dispositivos em relação ao próprio nó, e não enumerar todos os nós de dispositivo para encontrar uma correspondência. Um usuário pode ter conectado várias instâncias do dispositivo, e o driver de firmware só deve atualizar o dispositivo ao qual está associado. Normalmente, o nó do dispositivo a ser localizado é o pai ou irmão do nó do dispositivo no qual o driver de firmware está instalado. Por exemplo, no diagrama com dois nós de dispositivo, o driver de atualização de firmware pode procurar um dispositivo irmão para encontrar o driver de função. No diagrama seguinte, o driver de firmware pode procurar o dispositivo pai para encontrar o dispositivo principal com o qual ele precisa se comunicar.

  • O driver deve ser robusto para várias instâncias do dispositivo que está no sistema, possivelmente com várias versões de firmware diferentes. Por exemplo, pode haver uma instância do dispositivo que foi conectada e atualizada várias vezes. Um dispositivo completamente novo pode então ser conectado, ainda que tenha várias versões de firmware desatualizadas. Isso significa que o estado (como a versão atual) deve ser armazenado no dispositivo, e não em um local global.

  • Se houver um método existente para atualizar o firmware (EXE ou coinstalador, por exemplo), você pode reutilizar em grande parte o código de atualização dentro de um driver UMDF.