다음을 통해 공유


디바이스 펌웨어 업데이트 공동 설치 관리자를 사용하지 않고 USB 디바이스용

중요

Windows 11 버전 22H2용 WDK부터 WDF 재배포 가능 공동 설치 관리자가 더 이상 지원되지 않습니다. 이 변경을 해결하는 방법을 알아보려면 WDK 알려진 문제 문서에서 WDF 재배포 가능 공동 설치 관리자가 작동하지 않음을 참조하세요.

USB 디바이스 공급업체는 공동 설치 관리자를 사용하여 받은 편지함 USB 디바이스 드라이버를 사용하는 디바이스에 대한 디바이스 펌웨어를 업데이트합니다. 그러나 공동 설치 관리자는 Windows 10 요구 사항인 새로운 "유니버설 INF" 표준에서 지원되지 않습니다. 이렇게 하면 기존 USB 디바이스 펌웨어 업데이트 프로세스에 문제가 발생합니다. 이 문서에서는 공동 설치 관리자 없이 USB 디바이스 펌웨어를 업데이트하는 권장 방법을 간략하게 설명합니다.

요구 사항

USB 디바이스 펌웨어 업데이트 프로세스의 기본 요구 사항은 다음과 같습니다.

  1. 사용자 상호 작용 없이 원활한 펌웨어 업데이트

  2. 신뢰할 수 있는 복구 메커니즘(예: 디바이스의 브릭킹 없음)

  3. Windows 7 이상에서 작동

개요

UVC 카메라와 같은 USB 디바이스는 현장 업데이트 가능한 펌웨어와 함께 릴리스됩니다. 현재 펌웨어를 업데이트하는 표준 방법은 없습니다. 모든 기존 업데이트 메커니즘에 공통적인 한 가지 항목은 일부 사용자 지정 소프트웨어 제품군이 클라이언트에서 실행되어 펌웨어를 디바이스에 다운로드한다는 것입니다. 일반적으로 디바이스 설치 프로세스의 일부로 소프트웨어 제품군을 업데이트하는 펌웨어가 설치됩니다. 공동 설치 관리자 킥은 펌웨어 업데이트 프로세스를 시작합니다. Windows 10 공동 설치 관리자가 없을 경우 디바이스 공급업체가 현장에서 이러한 디바이스의 펌웨어를 업데이트할 수 없습니다.

USB 디바이스 펌웨어 업데이트 시나리오에 대한 공동 설치 관리자의 부재를 피하는 권장 방법은 펌웨어 업데이트 프로세스를 시작하는 USB 디바이스에 낮은 필터 드라이버를 사용하는 것입니다. AddDevice 호출 중에 필터 드라이버는 디바이스 펌웨어 버전을 확인하고 필요한 경우 펌웨어를 업데이트합니다.

펌웨어 업데이트 개요

USB 디바이스가 시스템에 연결되어 있으면 제네릭 받은 편지함 드라이버가 디바이스에 설치됩니다. 일반 드라이버를 설치한 후 OS는 Windows 업데이트 서버에 공급업체별 드라이버 패키지 가용성을 쿼리하고 다운로드하여 드라이버를 설치합니다. 설치된 드라이버 패키지는 펌웨어 업데이트를 수행합니다.

펌웨어를 업데이트하는 방법에는 두 가지가 있습니다.

  1. 펌웨어 업데이트 필터 드라이버

    1. 공급업체가 펌웨어 업데이트를 수행하는 하위 필터 드라이버를 제공했습니다.
  2. 펌웨어 업데이트 디바이스 드라이버

    1. 공급업체는 디바이스를 "펌웨어 업데이트 모드"에 배치하는 하위 필터 드라이버를 제공했습니다.

    2. 디바이스는 펌웨어 업데이트 디바이스로 열거됩니다.

    3. 공급업체는 이 디바이스에 대해 펌웨어 업데이트 드라이버를 로드하고 펌웨어를 업데이트합니다.

방법 1: 펌웨어 업데이트 필터 드라이버

이 메서드에서는 USB 디바이스 드라이버에 대한 하위 필터 드라이버가 드라이버 업데이트 프로세스의 일부로 설치됩니다. 이 필터 드라이버는 펌웨어 업데이트를 수행합니다.

Windows 업데이트 서버의 드라이버 업데이트 패키지에는 다음이 포함됩니다.

  • 펌웨어 업데이트 WDF 하위 필터 드라이버

  • 펌웨어 업데이트 WDF 하위 필터 드라이버를 설치하는 확장 INF

  • "firmware.bin" 파일

펌웨어 업데이트 UMDF 하위 필터 드라이버 메서드.

드라이버 업데이트 패키지를 설치하는 동안 펌웨어 업데이트 WDF 필터 드라이버의 AddDevice 루틴이 호출됩니다. 이 루틴에서 WDF 필터 드라이버는 디바이스 HW 레지스트리 키에서 디바이스 펌웨어 버전에 대해 가져옵니다. 디바이스 펌웨어는 MSOS 설명자를 사용하여 펌웨어 버전을 디바이스 HW 레지스트리 키에 배치해야 합니다.

  1. 디바이스 펌웨어 버전 및 필터 드라이버 예상 펌웨어 버전이 다른 경우 또는

  2. 디바이스 HW 레지스트리 키에서 펌웨어 버전을 사용할 수 없습니다.

    1. 그런 다음, 필터 드라이버는 AddDevice 콜백에 성공을 반환하여 디바이스 스택에 자신을 삽입합니다.
  3. 그렇지 않으면 필터 드라이버가 디바이스 스택에 삽입되지 않습니다.

    1. 디바이스에 예상되는 펌웨어가 있으므로 펌웨어를 업데이트할 필요가 없기 때문입니다.

나중에 WDF 필터 드라이버의 EVT_WDF_DEVICE_D0_ENTRY 콜백이 호출되면 필터 드라이버는 usb 디바이스가 디바이스를 등록할 디바이스 인터페이스 클래스를 수신 대기하기 위해 CM_Register_Notification 또는 IoRegisterPlugPlayNotification(UMDF 또는 KMDF)을 사용하여 디바이스 인터페이스 변경 알림에 등록해야 합니다. Ror 예제에서는 RGB 카메라의 펌웨어 업데이트 필터 드라이버가 KSCATEGORY_VIDEO_CAMERA 등록합니다. 알림을 받으면 필터 드라이버가 펌웨어 업데이트를 수행하는 작업 항목을 게시해야 합니다.

UMDF 기반 펌웨어 업데이트 드라이버는 디바이스별 API를 사용하거나 제어 전송을 직접 실행하여 USB 디바이스에 액세스하여 펌웨어 업데이트를 수행할 수 있습니다. 예를 들어 카메라의 UMDF 기반 필터 드라이버는 카메라 API를 사용하여 펌웨어 업데이트를 수행합니다.

KMDF 기반 펌웨어 업데이트 드라이버는 공급업체 특정 명령을 보내 펌웨어 업데이트를 수행할 수 있습니다.

펌웨어 플래시가 완료되면 디바이스의 연결을 끊고 버스에 다시 연결해야 합니다. 디바이스가 새 펌웨어로 다시 열거됩니다.

"펌웨어 업데이트 필터 드라이버"를 사용하는 방법은 디바이스 메모리에 두 개의 전체 펌웨어 이미지(업데이트 이미지 및 백업 이미지)를 저장할 수 있는 충분한 리소스가 있는 디바이스에 권장됩니다. 그 이유는 업데이트된 펌웨어를 다운로드하는 동안 오류가 발생한 경우 디바이스가 업데이트를 포기하고 원래 펌웨어로 부팅할 수 있기 때문입니다. 따라서 디바이스를 벽돌로 브릭하지 않습니다.

방법 2: 펌웨어 업데이트 디바이스 드라이버

이 메서드에서는 드라이버 업데이트 프로세스의 일부로 USB 디바이스에 대한 하위 필터 드라이버가 설치됩니다. 이 필터 드라이버는 디바이스가 펌웨어 업데이트 인터페이스를 노출하는 펌웨어 업데이트 모드에서 다시 시작하는 명령을 디바이스에 보냅니다. 펌웨어 업데이트 인터페이스의 드라이버는 펌웨어 업데이트를 로드하고 수행합니다.

디바이스에 대한 Windows 업데이트 서버의 드라이버 업데이트 패키지에는 다음이 포함됩니다.

  1. 디바이스를 펌웨어 업데이트 모드로 배치하는 WDF 하위 필터 드라이버

  2. WDF 하위 필터 드라이버를 설치하는 확장 INF

드라이버 업데이트 패키지 외에도 다음과 같은 별도의 펌웨어 업데이트 디바이스 드라이버 패키지가 Windows 업데이트 있습니다.

  1. WDF 펌웨어 업데이트 디바이스 드라이버 및 해당 INF 및

  2. "firmware.bin" 파일입니다.

펌웨어 업데이트 WDF 드라이버 메서드.

드라이버 업데이트 패키지를 설치하는 동안 WDF 하위 필터 드라이버의 AddDevice 루틴이 호출됩니다. 이 루틴에서 필터 드라이버는 디바이스 HW 레지스트리 키에서 디바이스 펌웨어 버전을 쿼리합니다. 디바이스 펌웨어는 MSOS 설명자 또는 USB 디바이스의 확장 INF를 사용하여 디바이스 HW 레지스트리 키에 "펌웨어 버전"을 배치해야 합니다.

  1. 디바이스 펌웨어 버전 및 필터 드라이버 예상 펌웨어 버전이 다른 경우 또는

  2. 디바이스 HW 레지스트리 키에서 펌웨어 버전을 사용할 수 없습니다.

  3. 그런 다음 WDF 필터 드라이버가 디바이스 스택에 자신을 삽입합니다.

  4. 그렇지 않으면 WDF 필터 드라이버가 디바이스 스택에 삽입되지 않습니다.

나중에 WDF 필터 드라이버의 EVT_WDF_DEVICE_D0_ENTRY 콜백이 호출되면 필터 드라이버는 펌웨어 업데이트 모드로 배치할 디바이스에 공급업체별 명령을 실행합니다. 즉, 디바이스가 연결을 끊고 다시 연결하여 펌웨어 업데이트 인터페이스를 노출합니다.

시스템은 펌웨어 업데이트 디바이스 인터페이스를 열거합니다. 공급업체에서 제공하는 사용자 지정 펌웨어 업데이트 WDF 드라이버는 펌웨어 업데이트 패키지에서 이 펌웨어 업데이트 인터페이스에 대해 로드됩니다. 이 드라이버는 펌웨어를 업데이트합니다.

나중에 WDF 펌웨어 업데이트 드라이버의 EVT_WDF_DEVICE_D0_ENTRY 콜백이 호출되면 드라이버는 펌웨어 업데이트를 수행하는 작업 항목을 게시해야 합니다.

펌웨어 플래시가 완료되면 디바이스의 연결을 끊고 버스에 다시 연결해야 합니다. 디바이스가 새 펌웨어로 다시 열거됩니다.

이 방법은 디바이스의 메모리 부족으로 인해 업데이트된 원래 펌웨어 이미지를 저장할 수 없는 디바이스에 권장됩니다. 그 이유는 업데이트된 펌웨어를 다운로드하는 동안 오류가 발생한 경우 디바이스가 업데이트를 중단하고 디바이스를 펌웨어 업데이트 모드로 다시 부팅할 수 있으며 펌웨어 업데이트를 다시 시도 할 수 있기 때문입니다. 따라서 디바이스를 벽돌로 브릭하지 않습니다.

복구

펌웨어 업데이트 프로세스는 여러 가지 이유로 실패할 수 있습니다. 이 경우 디바이스가 다시 열거되면 펌웨어 업데이트 드라이버가 펌웨어를 다시 업데이트하려고 시도할 수 있으며 다시 실패할 수 있으며 이 업데이트 프로세스가 루프로 끝날 수 있습니다. 펌웨어 업데이트 드라이버는 수행할 수 있는 재시도 횟수에 상한을 두어야 합니다. 펌웨어 업데이트 재시도가 임계값(예: 3회 재시도)을 초과하면 필터 드라이버는 WU에서 새 버전의 드라이버를 다운로드할 때까지 펌웨어를 다시 업데이트하지 않아야 합니다. 펌웨어 업데이트 드라이버는 레지스트리를 사용하여 다시 시도 상태를 유지할 수 있습니다.

디바이스 펌웨어 업데이트가 끝나면 디바이스 자체를 재설정하고 다시 열거하는 것이 좋습니다.

펌웨어 업데이트의 두 방법 모두 펌웨어 업데이트를 수행하기 전에 디바이스 함수를 중지해야 합니다. 이렇게 하면 디바이스에 대한 열린 핸들이 없고 OS 다시 시작 요구 사항이 방지됩니다.

샘플 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"