Megosztás a következőn keresztül:


Eszköz belső vezérlőprogramjának frissítése USB-eszközökhöz társtelepítő használata nélkül

Fontos

A Windows 11 WDK 22H2-es verziójától kezdve a WDF terjeszthető társtelepítők már nem támogatottak. A módosítás megkerüléséhez lásd: A WDF terjeszthető társtelepítői nem működnek a WDK ismert problémáiról szóló cikkben.

Az USB-eszközök gyártói társtelepítők használatával frissítik a firmvert azoknál az eszközöknél, amelyek beépített USB-eszközillesztőket használnak. A társtelepítőket azonban nem támogatja az új "Universal INF" szabvány, amely a Windows 10-ben követelmény. Ez kihívást jelent a meglévő USB-eszköz belső vezérlőprogramjának frissítési folyamatával kapcsolatban. Ez a cikk egy ajánlott módszert mutat be az USB-eszköz belső vezérlőprogramjának együttes telepítő nélküli frissítéséhez.

Követelmények

Az USB-eszköz belső vezérlőprogramjának frissítési folyamatának elsődleges követelményei a következők:

  1. Közvetlen belső vezérlőprogram-frissítés felhasználói beavatkozás nélkül

  2. Megbízható helyreállítási mechanizmus (például az eszközök téglázása nélkül)

  3. Windows 7-en és újabb verziókon is működik

Áttekintés

Az USB-eszközök, például az UVC kamerák helyszíni, frissíthető belső vezérlőprogrammal jelennek meg. Jelenleg nincs szabványos módszer a belső vezérlőprogram frissítésére. Az egyik gyakori elem az összes meglévő frissítési mechanizmus esetében, hogy néhány egyéni szoftvercsomag fut az ügyfélen, és letölti a belső vezérlőprogramot az eszközre. Az eszköztelepítési folyamat részeként általában telepítve van a belső vezérlőprogram frissítési szoftvercsomagja. A társtelepítő indítása elindítja a belső vezérlőprogram frissítési folyamatát. A Windows 10-en a társtelepítők hiánya megakadályozza, hogy az eszközgyártók frissítsék a belső vezérlőprogramot ezeken az eszközökön a mezőben.

Az USB-eszköz belső vezérlőprogramjának frissítési forgatókönyvéhez tartozó társtelepítő hiányának megkerülésére javasolt módszer egy alacsonyabb szűrőillesztő használata az USB-eszközre, amely elindítja a belső vezérlőprogram frissítési folyamatát. Az AddDevice hívás során a szűrőillesztő ellenőrzi az eszköz belső vezérlőprogramjának verzióját, és szükség esetén frissíti a belső vezérlőprogramot.

Belső vezérlőprogram frissítése – áttekintés

Ha egy USB-eszköz csatlakoztatva van a rendszerhez, az általános beérkezett üzenetek illesztőprogramja telepítve van az eszközhöz. Az általános illesztőprogram telepítése után az operációs rendszer lekérdezi a Windows Update-kiszolgálót az illesztőprogram-csomagok rendelkezésre állásáról, és letölti és telepíti az illesztőprogramot. A telepített illesztőprogram-csomag végrehajtja a belső vezérlőprogram frissítését.

A belső vezérlőprogram kétféleképpen frissíthető:

  1. Belső vezérlőprogram szűrőmeghajtó frissítése

    1. Egy szállító alacsonyabb szűrőillesztőt adott meg, amely végrehajtja a belső vezérlőprogram frissítését.
  2. Firmverfrissítő eszközillesztő

    1. Egy szállító alacsonyabb szűrőillesztőt adott meg, amely belső vezérlőprogram-frissítési módban helyezi el az eszközt.

    2. Az eszköz firmware frissítési eszközként van számontartva.

    3. A szállító által megadott belső vezérlőprogram frissítési illesztőprogramja betöltődik az eszközön, és frissíti a belső vezérlőprogramot.

1. módszer: Belső vezérlőprogram frissítési szűrőillesztője

Ebben a módszerben az USB-eszközillesztő alacsonyabb szűrőillesztője az illesztőprogram frissítési folyamatának részeként települ. Ez a szűrőillesztő végrehajtja a belső vezérlőprogram frissítését.

A Windows Update-kiszolgálón található illesztőprogram-frissítési csomag a következőket tartalmazza:

  • Firmverfrissítés a WDF alacsony szűrőillesztő-vezérlővel

  • Bővítmény INF a belső vezérlőprogram frissítésének WDF alsó szűrőillesztőjének telepítéséhez

  • A "firmware.bin" fájl

A belső vezérlőprogram az UMDF alacsonyabb szűrőillesztőmetódusát frissíti.

Az illesztőprogram-frissítési csomag telepítésekor a rendszer meghívja a WDF-szűrőillesztő AddDevice rutinját. Ebből a rutinból a WDF-szűrőillesztő lekéri az eszköz belső vezérlőprogramjának verzióját az eszköz HW beállításkulcsából. Az eszköz belső vezérlőprogramjának az MSOS-leíró segítségével kell a belső vezérlőprogram verzióját elhelyeznie az eszköz hardver beállításkulcsán.

  1. Ha az eszköz belső vezérlőprogramjának verziója és a szűrőillesztő várt belsővezérlőprogram-verziója eltérő, vagy

  2. A belső vezérlőprogram verziója nem érhető el az eszköz HW beállításkulcsában

    1. Ezután a szűrőillesztő beszúrja magát az eszközverembe az AddDevice visszahívás sikeres visszaadásával.
  3. Máskülönben a szűrőillesztő nem illeszkedik az eszközhalmazba.

    1. Mivel nincs szükség a belső vezérlőprogram frissítésére, mivel az eszköz rendelkezik a várt belső vezérlőprogrammal.

Amikor a WDF-szűrőillesztő EVT_WDF_DEVICE_D0_ENTRY visszahívását egy későbbi időpontban hívják meg, a szűrőillesztőnek regisztrálnia kell az eszköz felületének változásértesítésére az CM_Register_Notification vagy az IoRegisterPlugPlayNotification (UMDF vagy KMDF) használatával, hogy meghallgassa azt az eszközfelület-osztályt, amelybe az USB-eszköz regisztrálja az eszközt. Például az RGB-kamera firmware-frissítési szűrőillesztő program regisztrálna a KSCATEGORY_VIDEO_CAMERA. Az értesítés fogadásakor a szűrőillesztőnek közzé kell tennie egy olyan munkaelemet, amely végrehajtaná a belső vezérlőprogram frissítését.

Az UMDF-alapú belső vezérlőprogram-frissítési illesztőprogramok használhatják az eszközspecifikus API-kat, vagy közvetlenül a vezérlőátvitelek kiadásával érhetik el az USB-eszközt a belső vezérlőprogram frissítésének végrehajtásához. A kamera UMDF-alapú szűrőillesztője például Kamera API-kat használ a belső vezérlőprogram frissítéséhez.

A KMDF-alapú belső vezérlőprogram-frissítési illesztőprogramok elküldhetik a gyártó által megadott parancsokat a belső vezérlőprogram frissítésének végrehajtásához.

A firmware frissítés befejezésekor az eszköznek leválasztódnia és újra csatlakoznia kell a buszhoz. Az eszköz újra azonosítva van új firmware-rel.

A "belső vezérlőprogram frissítési szűrőillesztőjének" használatát olyan eszközök esetében javasoljuk, amelyek elegendő erőforrással rendelkeznek ahhoz, hogy két teljes belsővezérlőprogram-lemezképet (a frissítési lemezképet és egy biztonsági mentési lemezképet) tartsanak az eszköz memóriájában. Ennek az az oka, hogy ha a frissített belső vezérlőprogram letöltése során hibák történtek, az eszköz megszakíthatja a frissítést, és elindíthatja az eredeti belső vezérlőprogramba. Így nem válik használhatatlanná az eszköz.

2. módszer: Az eszközillesztő belső vezérlőprogramjának frissítése

Ebben a módszerben az usb-eszköz alacsonyabb szűrőillesztője lesz telepítve az illesztőprogram frissítési folyamatának részeként. Ez a szűrőillesztő egy parancsot küld az eszköznek a belső vezérlőprogram frissítési módban való újraindításához, ahol az eszköz elérhetővé tesz egy belső vezérlőprogram-frissítési felületet. A belső vezérlőprogram frissítési felületének illesztőprogramja betöltődik, és végrehajtja a belső vezérlőprogram frissítését.

A Windows Update-kiszolgálón az eszköz illesztőprogram-frissítési csomagja a következőket tartalmazza:

  1. Alsóbbrendű WDF szűrőillesztőprogram, amely az eszközt firmware-frissítési módba állítja.

  2. Bővítmény INF a WDF alsó szűrőillesztőjének telepítéséhez

Az illesztőprogram-frissítési csomag mellett egy külön Belső vezérlőprogram-frissítési eszközillesztő csomag is megtalálható a Windows Update-ben, a következőkkel:

  1. A WDF belső vezérlőprogramja frissíti az eszközillesztőt és annak INF-jét, és

  2. A "firmware.bin" fájl.

Firmware-frissítési módszer WDF-illesztőprogrammal.

Az illesztőprogram-frissítési csomag telepítésekor a rendszer meghívja a WDF alsó szűrőillesztő AddDevice rutinját. Ebből a rutinból a szűrőillesztő lekérdezi az eszköz belső vezérlőprogramjának verzióját az eszköz HW beállításkulcsából. Az eszköz belső vezérlőprogramja az MSOS-leíró vagy az USB-eszköz INF bővítményének használatával helyezi el a "belső vezérlőprogram verzióját" az eszköz HW beállításkulcsára.

  1. Ha az eszköz belső vezérlőprogramjának verziója és a szűrőillesztő várt belsővezérlőprogram-verziói eltérőek, vagy

  2. A belső vezérlőprogram verziója nem érhető el az eszköz HW beállításkulcsában

  3. Ezután a WDF szűrőillesztő beszúrja magát az eszközverembe.

  4. Máskülönben a WDF szűrőillesztőprogram nem kerül be az eszközverembe.

Amikor a WDF-szűrőillesztő EVT_WDF_DEVICE_D0_ENTRY visszahívását később hívják meg, a szűrőillesztő egy szállítóspecifikus parancsot ad ki az eszköznek, amely firmware frissítési módba helyezi. Az eszköz leválasztja és újracsatlakozik, és felfedi a belső vezérlőprogram frissítési felületét.

A rendszer számbaveszi a belső vezérlőprogram frissítési eszköz felületét. A gyártó által megadott egyéni WDF-illesztőprogramot töltik be a belső vezérlőprogram frissítési csomagjából a frissítési felülethez. Ez az illesztőprogram frissíti a belső vezérlőprogramot.

Amikor később meghívják a EVT_WDF_DEVICE_D0_ENTRY visszahívást a WDF firmware frissítési illesztőprogramban, az illesztőprogramnak közzé kell tennie egy munkaelemet, amely végrehajtja a firmware frissítését.

A belső vezérlőprogram frissítésének befejezésekor az eszköznek le kell csatlakoznia, majd újra kell csatlakoznia a buszhoz. Az eszköz új belső vezérlőprogrammal újraazonosításra kerül.

Ez a módszer olyan eszközök számára ajánlott, amelyek nem tudják tárolni a frissített és eredeti belső vezérlőprogram-lemezképeket, mert kevés a memória az eszközön. Ennek az az oka, hogy ha a frissített belső vezérlőprogram letöltése során hibák történtek, az eszköz megszakíthatja a frissítést, és újra elindíthatja az eszközt a belső vezérlőprogram frissítési módjába, és újra megpróbálhatja a belső vezérlőprogram frissítését. Így nem válik használhatatlanná az eszköz.

Helyreállítás

A belső vezérlőprogram frissítési folyamata különböző okokból meghiúsulhat. Ha ez történik, az eszköz ismételt számbavételekor a belső vezérlőprogram frissítési illesztőprogramja megpróbálhatja újra frissíteni a belső vezérlőprogramot, és előfordulhat, hogy ismét sikertelen lesz, és ez a frissítési folyamat ciklusba kerülhet. A belső vezérlőprogram frissítési illesztőprogramjának felső korlátot kell szabnia az újrapróbálkozási műveletek számának. Ha a belső vezérlőprogram frissítési újrapróbálkozási kísérletei túllépnek egy küszöbértéket (például három újrapróbálkozás), a szűrőillesztőnek nem kell újból frissítenie a belső vezérlőprogramot, amíg az illesztőprogram új verziója le nem töltődik a WU-ból. A belső vezérlőprogram frissítési illesztőprogramja a beállításjegyzék használatával őrizheti meg az újrapróbálkozás állapotát.

Az eszköz belső vezérlőprogramjának frissítése után azt javasoljuk, hogy az eszköz indítsa újra magát, és újra enumerálja magát.

A készülék működését le kell állítani a belső vezérlőprogram frissítése előtt, mindkét frissítési módszer esetén. Ez biztosítja, hogy ne legyenek nyitott eszközkezelők, és elkerüli az operációs rendszer újraindításának szükségességét.

Minta 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"