Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Från och med WDK för Windows 11, version 22H2, stöds inte längre WDF-omdistribuerbara saminstallationer. Information om hur du kan kringgå den här ändringen finns i artikeln "WDF omdistribuerbara co-installatörer fungerar inte" i artikeln om kända problem med WDK.
USB-enhetsleverantörer använder sig av saminstallationsprogram för att uppdatera firmware på enheter som använder inbyggda USB-enhetsdrivrutiner. Saminstallationer stöds dock inte av den nya standarden "Universal INF", vilket är ett krav för Windows 10. Detta utgör en utmaning för den befintliga uppdateringsprocessen för den inbyggda USB-enheten. Den här artikeln beskriver en rekommenderad metod för att uppdatera den inbyggda programvaran för USB-enheter utan ett saminstallationsprogram.
Kravspecifikation
De primära kraven från uppdateringsprocessen för usb-enhetens inbyggda programvara är:
Sömlös uppdatering av inbyggd programvara utan användarinteraktion
Tillförlitlig återställningsmekanism (till exempel ingen murning av enheter)
Fungerar i Windows 7 och senare
Översikt
USB-enheter som UVC-kameror släpps med uppdaterbar firmware direkt i fältet. Det finns ingen standardmetod för att uppdatera den inbyggda programvaran idag. Ett objekt som är gemensamt för alla befintliga uppdateringsmekanismer är att vissa anpassade programvarusviter körs på klienten och laddar ned den inbyggda programvaran till enheten. Som en del av installationen av enheten installeras vanligtvis programvarupaketet för uppdatering av inbyggd programvara. Medinstallationsprogrammet sätter igång uppdateringsprocessen för inbyggd programvara. Avsaknaden av saminstallationer på Windows 10 hindrar enhetsleverantörer från att uppdatera den inbyggda programvaran på dessa enheter i fältet.
Den rekommenderade metoden för att kringgå avsaknaden av ett saminstallationsprogram för uppdateringsscenariot för usb-enhetens inbyggda programvara är att använda en lägre filterdrivrutin till USB-enheten som startar uppdateringsprocessen för inbyggd programvara. Under AddDevice-anropet kontrollerar filterdrivrutinen enhetens version av inbyggd programvara och uppdaterar den inbyggda programvaran om det behövs.
Översikt över uppdatering av inbyggd programvara
När en USB-enhet är ansluten till systemet installeras den allmänna inkorgsdrivrutinen för enheten. Efter installationen av den allmänna drivrutinen frågar operativsystemet Windows Update-servern efter eventuell tillgänglighet för leverantörsspecifika drivrutinspaket och laddar ned den och installerar drivrutinen. Det installerade drivrutinspaketet utför uppdateringen av den inbyggda programvaran.
Det finns två sätt att uppdatera den inbyggda programvaran:
Filterdrivrutin för uppdatering av firmware
- En leverantör tillhandahåller en lägre filterdrivrutin som utför firmwareuppdateringen.
Drivrutin för uppdatering av inbyggd programvara
En leverantör har levererat en underordnad filterdrivrutin som sätter enheten i firmwareuppdateringsläge.
Enheten räknas upp som en uppdateringsenhet för inbyggd programvara.
Leverantörslevererad uppdateringsdrivrutin för inbyggd programvara installeras på den här enheten och uppdaterar den inbyggda programvaran.
Metod 1: Filterdrivrutin för att uppdatera firmware
I den här metoden installeras en lägre filterdrivrutin till USB-drivrutinen som en del av drivrutinsuppdateringsprocessen. Den här filterdrivrutinen utför uppdateringen av den inbyggda programvaran.
Drivrutinsuppdateringspaketet på Windows Update-servern innehåller:
En WDF-drivrutin för firmwareuppdatering med lägre filter
Ett tilläggs-INF för att installera firmvaruuppdateringens lägre filterdrivrutin för WDF
Filen "firmware.bin"
När du installerar drivrutinsuppdateringspaketet anropas WDF-filterdrivrutinens AddDevice-rutin för uppdatering av inbyggd programvara. Från den här rutinen hämtar WDF-filterdrivrutinen för enhetens version av inbyggd programvara från enhetens HW-registernyckel. Enhetens inbyggda programvara ska placera versionen av den inbyggda programvaran med hjälp av MSOS-beskrivningen på enhetens HW-registernyckel.
Om versionen av enhetens inbyggda programvara och den förväntade versionen av den inbyggda programvaran för filterdrivrutinen är olika, eller
Versionen av den inbyggda programvaran är inte tillgänglig i enhetens HW-registernyckel
- Sedan infogar filterdrivrutinen sig själv i enhetsstacken genom att returnera framgång till AddDevice-återanropet.
Annars infogas inte filterdrivrutinen i enhetsstacken
- Eftersom det inte är nödvändigt att uppdatera den inbyggda programvaran eftersom enheten har den förväntade inbyggda programvaran.
När EVT_WDF_DEVICE_D0_ENTRY återanrop av WDF-filterdrivrutinen anropas vid ett senare tillfälle måste filterdrivrutinen registrera sig för meddelanden om ändring av enhetsgränssnitt med hjälp av CM_Register_Notification eller IoRegisterPlugPlayNotification (UMDF eller KMDF) för att lyssna på enhetsgränssnittsklassen som USB-enheten registrerar enheten i. Till exempel skulle filterdrivrutinen för firmware-uppdateringar för en RGB-kamera registreras för KSCATEGORY_VIDEO_CAMERA. När meddelandet tas emot bör filterdrivrutinen publicera ett arbetsobjekt som kommer att utföra firmware-uppdateringen.
UMDF-baserade drivrutiner för uppdatering av inbyggd programvara kan använda enhetsspecifika API:er eller utfärda kontrollöverföringarna direkt för att komma åt USB-enheten för att utföra uppdateringen av den inbyggda programvaran. Den UMDF-baserade filterdrivrutinen för en kamera använder till exempel kamera-API:er för att utföra uppdateringen av den inbyggda programvaran.
KMDF-baserade drivrutiner för uppdatering av inbyggd programvara kan skicka leverantörsspecifika kommandon för att utföra uppdateringen av den inbyggda programvaran.
När den inbyggda programvaran har uppdaterats måste enheten kopplas från och återansluta till bussen. Enheten räknas upp igen med ny inbyggd programvara.
Metoden för att använda en "drivrutin för uppdatering av inbyggd programvara" rekommenderas för enheter som har tillräckligt med resurser för att lagra två fullständiga avbildningar av inbyggd programvara (uppdateringsbilden och en säkerhetskopia) i enhetens minne. Orsaken är att om det uppstod fel när den uppdaterade inbyggda programvaran laddades ned kan enheten avbryta uppdateringen och starta den ursprungliga inbyggda programvaran. Alltså inte bricka enheten.
Metod 2: Uppdatera drivrutin för enhetens inbyggda programvara
I den här metoden installeras en lägre filterdrivrutin till USB-enheten som en del av drivrutinsuppdateringsprocessen. Den här filterdrivrutinen skickar ett kommando till enheten för att starta om i uppdateringsläget för inbyggd programvara, där enheten exponerar ett gränssnitt för uppdatering av inbyggd programvara. Drivrutinen för gränssnittet för uppdatering av inbyggd programvara läser in och utför uppdateringen av den inbyggda programvaran.
Drivrutinsuppdateringspaketet på Windows Update-servern för enheten innehåller:
En WDF-drivrutin med lägre filter som placerar enheten i uppdateringsläge för inbyggd programvara
Ett tilläggs-INF för att installera WDF-drivrutinen för lägre filter
Förutom drivrutinsuppdateringspaketet finns ett separat uppdateringspaket för enhetsdrivrutiner för inbyggd programvara på Windows Update, med:
En WDF-firmwareuppdateringsdrivrutin och dess INF-fil,
Filen "firmware.bin".
När du installerar drivrutinsuppdateringspaketet anropas WDF-lägre filterdrivrutinens AddDevice-rutin. Från den här rutinen frågar filterdrivrutinen efter enhetens version av inbyggd programvara från enhetens HW-registernyckel. Enhetens inbyggda programvara placerar "firmware-versionen", med hjälp av MSOS-beskrivningen eller USB-enhetens tillägg INF, på enhetens HW-registernyckel.
Om versionen av enhetens inbyggda programvara och filterdrivrutinens förväntade versioner av inbyggd programvara är olika eller
Versionen av den inbyggda programvaran är inte tillgänglig i enhetens HW-registernyckel
Sedan infogas WDF-filterdrivrutinen i enhetshierarkin.
Annars infogas inte WDF-filterdrivrutinen i enhetsstacken
När återanropet EVT_WDF_DEVICE_D0_ENTRY för WDF-filterdrivrutinen anropas vid ett senare tillfälle, utfärdar filterdrivrutinen ett leverantörsspecifikt kommando till enheten som placerar den i firmware-uppdateringsläge. Enheten kopplar från och återansluter och exponerar gränssnittet för uppdatering av inbyggd programvara.
Systemet räknar upp enhetsgränssnittet för uppdatering av inbyggd programvara. En anpassad WDF-drivrutin för uppdatering av inbyggd programvara som tillhandahålls av leverantören, i uppdateringspaketet för inbyggd programvara, kommer att läsas in för det här gränssnittet för uppdatering av inbyggd programvara. Den här drivrutinen uppdaterar den inbyggda programvaran.
När återanropet EVT_WDF_DEVICE_D0_ENTRY av drivrutinen för WDF-firmwareuppdatering anropas vid ett senare tillfälle, måste drivrutinen schemalägga ett arbetsobjekt som utför den inbyggda programvaruuppdateringen.
När den inbyggda programvaran har uppdaterats måste enheten kopplas från och återansluta till bussen. Enheten räknas upp igen med ny inbyggd programvara.
Den här metoden rekommenderas för enheter som inte kan lagra de uppdaterade och ursprungliga avbildningarna av inbyggd programvara på grund av brist på minne på enheten. Orsaken är att om det uppstod fel vid nedladdningen av den uppdaterade inbyggda programvaran kan enheten avbryta uppdateringen och starta enheten i läget för uppdatering av inbyggd programvara igen och uppdateringen av den inbyggda programvaran kan göras om. Alltså inte bricka enheten.
Återhämtning
Uppdateringsprocessen för den inbyggda programvaran kan misslyckas av olika orsaker. Om det händer, kan uppdateringsdrivrutinen för firmwaren försöka uppdatera firmwaren igen när enheten räknas upp igen. Den kan misslyckas igen, vilket kan resultera i att uppdateringsprocessen hamnar i en loop. Drivrutinen för uppdatering av inbyggd programvara måste sätta en övre gräns för hur många återförsök den kan utföra. När uppdateringsförsöken för den inbyggda programvaran överskrider ett tröskelvärde (till exempel tre återförsök) bör filterdrivrutinen inte försöka uppdatera den inbyggda programvaran igen förrän en ny version av drivrutinen har laddats ned från WU. Drivrutinen för uppdatering av inbyggd programvara kan använda registret för att bevara återförsökstillstånden.
I slutet av uppdateringen av enhetens inbyggda programvara rekommenderar vi att enheten återställer sig själv och räknar upp den igen.
Båda metoderna för uppdatering av inbyggd programvara måste enhetsfunktionen stoppas innan uppdateringen av den inbyggda programvaran utförs. Detta säkerställer att det inte finns något öppet handtag för enheten och undviker alla krav på omstart av operativsystemet.
Exempel på INF
;==============================================================================
; Microsoft Extension INF for USB Camera Firmware Update UMDF Filter Driver
; Copyright (C) Microsoft Corporation. All rights reserved.
;==============================================================================
[Version]
Signature="$WINDOWS NT$"
Class=Extension
ClassGUID={e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider=%CONTOSO%
ExtensionId={BC6EE554-271C-48C8-B713-8078833962BD} ; replace with your own GUID
CatalogFile.NT=SampleExtension.cat
DriverVer=08/28/2017,10.0.1700.000
PnpLockdown=1
[SourceDisksFiles]
ContosoFirmwareUpdateFilterDriver.dll=1
ContosoFirmware.bin=1
[SourceDisksNames]
1 = %MediaDescription%
[DestinationDirs]
UMDriverCopy=13
ContosoFirmwareCopy=13
DefaultDestDir = 13
[UMDriverCopy]
ContosoFirmwareUpdateFilterDriver.dll
[ContosoFirmwareCopy]
ContosoFirmware.bin
[Manufacturer]
%CONTOSO% = ContosoFirmwareUpdateFilterDriver,NTamd64.10.0...22000
[ContosoFirmwareUpdateFilterDriver.NTamd64.10.0...22000]
; replace with your camera device VID PID
%ContosoCamera.DeviceDesc% = ContosoFirmwareUpdateFilterDriver_Win11Install, USB\VID_1234&PID_1234&REV_1234
[ContosoFirmwareUpdateFilterDriver_Win11Install]
Include=wudfrd.inf
Needs=wudfrd.NT
CopyFiles=UMDriverCopy, ContosoFirmwareCopy
[ContosoFirmwareUpdateFilterDriver_Win11Install.HW]
Include=wudfrd.inf
Needs=wudfrd.NT.HW
[ContosoFirmwareUpdateFilterDriver.AddReg]
; Load the redirector as an lower filter on this specific device.
; 0x00010008 - FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND
HKR,,"LowerFilters",0x00010008,"WUDFRd"
[ContosoFirmwareUpdateFilterDriver_Win11Install.Services]
Include=wudfrd.inf
Needs=WUDFRD.NT.Services
[ContosoFirmwareUpdateFilterDriver_Win11Install.Wdf]
UmdfService=ContosoFirmwareUpdateFilterDriver, ContosoFirmwareUpdateFilterDriver.UmdfFilter
UmdfServiceOrder=ContosoFirmwareUpdateFilterDriver
[ContosoFirmwareUpdateFilterDriver.UmdfFilter]
UmdfLibraryVersion=2.0.0
ServiceBinary= "%13%\ContosoFirmwareUpdateFilterDriver.dll"
[Strings]
CONTOSO = "Contoso Inc."
ContosoCamera.DeviceDesc = "Contoso Camera Extension"
MediaDescription="Contoso Camera Firmware Update Filter Driver Installation Media"
WudfRdDisplayName = "WDF Reflector Driver"