Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como atualizar o firmware de um dispositivo removível ou no chassi usando o serviço WU (Windows Update). Para obter informações sobre como atualizar o firmware do sistema, consulte a 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 o conteúdo do firmware. Se você fornecer um driver de função para seu dispositivo, poderá adicionar a lógica de atualização de firmware e o payload ao driver existente ou fornecer um pacote de driver de atualização de firmware separado. Se o dispositivo usar um driver fornecido pela Microsoft, você deverá 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 Como usar um arquivo INF universal. O binário de driver pode usar KMDF, UMDF 2 ou o Modelo de Driver do Windows.
Como o 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 início do dispositivo ou durante a função de retorno de chamada EVT_WDF_DRIVER_DEVICE_ADD do driver:
- Identifique o dispositivo ao qual o driver está anexado.
- Determine se o driver possui uma versão de firmware mais recente do que a versão atualmente instalada no hardware do dispositivo.
- Se uma atualização de firmware for necessária, defina um temporizador de evento para agendar a atualização.
- Caso contrário, não faça nada até que o driver seja iniciado novamente.
Durante o tempo de execução do sistema:
- Se uma atualização for enfileirada, aguarde até que um conjunto de condições seja atendido.
- Quando as condições forem atendidas, execute a atualização de firmware no dispositivo.
Conteúdo do driver de atualização do firmware
Normalmente, o pacote de driver de atualização de firmware contém os seguintes itens:
- Universal Driver INF
- Catálogo de controladores
- Driver de função (.sys ou .dll)
- Binário de conteúdo de atualização de firmware
Envie seu pacote de atualização de firmware como uma submissão de driver separada.
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, conforme mostrado no diagrama a seguir:
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ê instalará o driver de atualização de firmware. O diagrama a seguir mostra como um dispositivo pode ter dois nós de dispositivo separados:
Os nós de dispositivos de firmware e de função devem ter identificadores de hardware diferentes para que possam ser alvo de forma independente.
Existem algumas maneiras de criar um segundo nó de dispositivo. Determinados tipos de dispositivo têm a capacidade de expor um segundo nó de dispositivo em um dispositivo físico, como um dispositivo USB. Você pode usar essa funcionalidade para criar um nó de dispositivo direcionado pelo 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 liste mais de um nó de dispositivo.
Nesse caso, use uma extensão INF que especifique a diretiva AddComponent para criar um nó de dispositivo alvo do Windows Update e nele instale o driver de atualização de firmware. O snippet a seguir 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 um ID de hardware SWC\ComponentDeviceId
. Quando instalado, esse INF cria a seguinte hierarquia de dispositivos:
Para atualizações futuras de firmware, atualize o INF e o arquivo binário que contém o conteúdo do firmware.
Adicionar lógica de atualização de firmware a um driver fornecido pela Microsoft
Para atualizar o firmware para dispositivos que usam um driver fornecido pela Microsoft, crie um segundo nó de dispositivo, conforme mostrado.
Práticas recomendadas
No arquivo INF do driver de atualização de firmware, 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 esta localização quando instala o dispositivo. Em seguida, o driver pode abrir essa chave do Registro para determinar o local do conteúdo.
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 do dispositivo em relação a si mesmo, não enumerando todos os nós de dispositivo para 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 com o qual ele 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 localizar o driver de função. No próximo diagrama, o driver de firmware pode procurar o dispositivo pai para encontrar o dispositivo primário com o qual ele precisa se comunicar.
O driver deve ser robusto para várias instâncias do dispositivo que estão no sistema, possivelmente com várias versões de firmware diferentes. Por exemplo, pode haver uma instância do dispositivo que foi conectado e atualizado várias vezes. Em seguida, um novo dispositivo pode ser conectado, que tem várias versões de firmware antigas. 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 co-instalador, por exemplo), você poderá reutilizar em grande parte o código de atualização em um driver UMDF.