Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
Közvetlen belső vezérlőprogram-frissítés felhasználói beavatkozás nélkül
Megbízható helyreállítási mechanizmus (például az eszközök téglázása nélkül)
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ő:
Belső vezérlőprogram szűrőmeghajtó frissítése
- Egy szállító alacsonyabb szűrőillesztőt adott meg, amely végrehajtja a belső vezérlőprogram frissítését.
Firmverfrissítő eszközillesztő
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.
Az eszköz firmware frissítési eszközként van számontartva.
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
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.
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
A belső vezérlőprogram verziója nem érhető el az eszköz HW beállításkulcsában
- Ezután a szűrőillesztő beszúrja magát az eszközverembe az AddDevice visszahívás sikeres visszaadásával.
Máskülönben a szűrőillesztő nem illeszkedik az eszközhalmazba.
- 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:
Alsóbbrendű WDF szűrőillesztőprogram, amely az eszközt firmware-frissítési módba állítja.
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:
A WDF belső vezérlőprogramja frissíti az eszközillesztőt és annak INF-jét, és
A "firmware.bin" fájl.
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.
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
A belső vezérlőprogram verziója nem érhető el az eszköz HW beállításkulcsában
Ezután a WDF szűrőillesztő beszúrja magát az eszközverembe.
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"