다음을 통해 공유


CFU(구성 요소 펌웨어 업데이트) INF 파일 구성

CFU에 대한 사용자 지정 INF 파일을 구성하려면 이 항목의 지침에 따라 펌웨어 이미지 파일 및 하드웨어 디바이스에 대한 올바른 값과 설정을 제공합니다.

참고

CFU는 Windows 10 버전 2004(Windows 10 2020년 5월 업데이트) 이상 버전에서 사용할 수 있습니다.

아래에 포함된 샘플 CFU INF 파일 은 디바이스의 사용자 지정 INF 파일에 대한 시작점을 제공합니다. 샘플 INF는 가상 CFU Hid 디바이스에 대한 펌웨어 업데이트 시나리오를 사용하도록 CFU 받은 편지함 드라이버(hidcfu.dll)를 구성합니다. 샘플 가상 디바이스 코드 및 가상 HID 디바이스에서 펌웨어 업데이트를 시뮬레이션하는 연습에 대한 자세한 내용은 CFU 가상 HID 디바이스 펌웨어 업데이트 시뮬레이션 항목을 참조하세요. 아래 섹션에서는 이 항목에서 설명하는 구성 개념을 설명하기 위해 포함된 샘플 INF 파일을 참조합니다.

실제 INF 파일은 디바이스 펌웨어 및 하드웨어에 맞게 특별히 사용자 지정하고 구성해야 합니다.

시작하기 전에

다음 리소스는 CFU(구성 요소 펌웨어 업데이트) 프로토콜에 대해 알아보는 데 도움이 됩니다.

개요

CFU 모델을 사용하여 디바이스의 펌웨어 이미지를 업데이트하려면 다음 요구 사항을 충족해야 합니다.

  • 디바이스에 대한 사용자 지정 INF 파일을 제공합니다. 이 파일은 디바이스에 펌웨어 업데이트를 보내는 CFU 받은 편지함 드라이버에 정보를 제공합니다. 펌웨어 업데이트 시나리오를 지원하려면 이 항목에서 아래에 제공된 샘플 CFU INF 파일을 사용자 지정하는 것이 좋습니다.

  • 디바이스는 CFU 드라이버의 업데이트를 수락할 수 있도록 CFU 프로토콜 을 준수하는 펌웨어 이미지와 함께 제공되어야 합니다.

  • 디바이스는 자신을 운영 체제(CFU 받은 편지함 드라이버 실행)에 HID 디바이스로 노출하고 HID Top-Level 컬렉션(TLC)을 노출해야 합니다. CFU 받은 편지함 드라이버는 TLC에 로드되고 디바이스에 펌웨어 업데이트를 보냅니다.

이를 통해 Windows 업데이트 통해 시장 내 디바이스를 서비스할 수 있습니다. 구성 요소에 대한 펌웨어를 업데이트하려면 Windows 업데이트 통해 펌웨어 업데이트 이미지를 배포합니다. CFU 받은 편지함 드라이버가 구성 요소의 존재를 감지하면 호스트에서 필요한 작업을 수행하고 펌웨어 이미지를 디바이스의 기본 구성 요소로 전송합니다.

CFU 펌웨어 업데이트.

사용자 지정 CFU INF 파일 구성

  1. 사용자 지정 INF 파일에 이 예제에 표시된 대로 디바이스의 하드웨어 ID를 삽입합니다.

    [Standard.NTamd64]
    %CfuVirtualHidDeviceFwUpdate.DeviceDesc%=CfuVirtualHidDeviceFwUpdate, HID\VID_045E&UP:FA00_U:00F5 ; HardwareID for VirtualHidDevice MCU
    

    INF 하드웨어 ID 설정

    CFU 받은 편지함 드라이버가 펌웨어와 통신하려면 INF에 지정된 하드웨어 ID가 펌웨어의 Hid 설명자 구성에 지정된 것과 일치해야 합니다.

    아래와 같이 CfuVirtualHidDeviceFwUpdate.inf 값은 가상 펌웨어 시뮬레이션 드라이버의 Hid 설명자에 지정된 값과 일치합니다.

    [Standard.NTamd64]
    %CfuVirtualHidDeviceFwUpdate.DeviceDesc%=CfuVirtualHidDeviceFwUpdate, HID\VID_045E&UP:FA00_U:00F5
    

    자세한 내용은 DmfInterface.cg_CfuVirtualHid_HidReportDescriptor(Hid Report Descriptor)의 다음 코드를 참조하세요.

    0x06, CFU_DEVICE_USAGE_PAGE,        // USAGE_PAGE(0xFA00)
    0x09, CFU_DEVICE_USAGE,             // USAGE(0xF5)
    
  2. 사용자 지정 INF 파일에서 펌웨어 업데이트의 파일과 일치하도록 여기에 표시된 다음 항목( SourceDisksFilesCopyFiles 섹션 포함)을 업데이트합니다.

    예를 들어 가상 CFU Hid 디바이스 샘플은 두 가지 구성 요소(MCU 및 오디오)를 지원합니다. 아래 샘플 섹션에서는 이러한 구성 요소에 대한 제품 및 페이로드 파일을 지정합니다.

    ; Specify the location of the firmware offer
    ; and payload file in the registry.
    ; The files are kept in driver store.
    ; When deployed, %13% would be expanded to
    ; the actual path in driver store.
    ;
    ; You can change subkey name under CFU
    ; (for example, "CfuVirtualHidDevice_MCU"),
    ; and specify your own offer
    ; (for example, "CfuVirtualHidDevice_MCU.offer.bin")
    ; and payload (for example, "CfuVirtualHidDevice_MCU.payload.bin")
    ; file name.
    ;
    HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_MCU,Offer,   0x00000000, %13%\CfuVirtualHidDevice_MCU.offer.bin
    HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_MCU,Payload, 0x00000000, %13%\CfuVirtualHidDevice_MCU.payload.bin
    HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_Audio,Offer,   0x00000000, %13%\CfuVirtualHidDevice_Audio.offer.bin
    HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_Audio,Payload, 0x00000000, %13%\CfuVirtualHidDevice_Audio.payload.bin
    
    [SourceDisksFiles]
    CfuVirtualHidDevice_MCU.offer.bin=1
    CfuVirtualHidDevice_MCU.payload.bin=1
    CfuVirtualHidDevice_Audio.offer.bin=1
    CfuVirtualHidDevice_Audio.payload.bin=1
    
    [CfuVirtualHidDeviceFwUpdate.CopyFiles]
    CfuVirtualHidDevice_MCU.offer.bin
    CfuVirtualHidDevice_MCU.payload.bin
    CfuVirtualHidDevice_Audio.offer.bin
    CfuVirtualHidDevice_Audio.payload.bin
    

    전체 CFU INF 샘플 파일 은 아래 샘플 CFU INF 파일을 참조하세요.

    참고

    패키지가 설치되면 OS는 레지스트리 값을 만들기 전에 을 파일의 전체 경로로 바꿉 %13% 니다. 따라서 드라이버는 레지스트리를 열거하고 모든 펌웨어 이미지를 식별하고 파일을 제공할 수 있습니다.

    참고

    위의 예제에서 "A410A898-8132-4246-AC1A-30F1E98BB0A4", "제안", "페이로드"는 CFU 받은 편지함 드라이버가 런타임에 이러한 값을 찾으므로 변경되지 않아야 합니다.

  3. 사용자 지정 INF 파일에서 아래의 테이블 및 샘플 INF 섹션에 설명된 레지스트리 값 기능 설정을 사용하여 디바이스의 기능을 지정합니다.

    CFU 받은 편지함 드라이버는 특정 시나리오에 최적화하도록 드라이버 동작을 사용자 지정하는 방법을 제공합니다. 이러한 설정은 아래 CFU 레지스트리 값 표에 설명된 레지스트리 설정을 통해 제어됩니다.

    예를 들어 CFU 받은 편지함 드라이버에는 펌웨어 구현에 따라 값 기능 사용량 세부 정보에 대한 정보가 필요합니다. 자세한 내용과 이 작업을 수행하는 방법에 대한 예제는 아래 의 INF 값 기능 설정 섹션을 참조하세요.

    펌웨어 구현 요구 사항에 따라 이러한 각 레지스트리 값을 구성할 수 있습니다.

    CFU 레지스트리 값

    레지스트리 값 Description
    맞춤 프로토콜 특성: 이 구성에 필요한 bin 레코드 맞춤은 무엇인가요?

    프로토콜의 페이로드 보내기 단계에서 드라이버는 많은 Hid 버퍼를 페이로드로 채우고 펌웨어로 하나씩 보냅니다.

    이 옵션은 페이로드를 압축할 때 맞춤 요구 사항을 제어합니다.

    기본적으로 8 바이트 맞춤이 사용됩니다. 맞춤이 필요하지 않은 경우 이를 1로 구성합니다.

    UseHidSetOutputReport 0 - 드라이버는 출력 보고서를 보내는 동안 쓰기 요청을 사용합니다.

    1 - 드라이버는 출력 보고서를 보내는 데 IOCTL_HID_SET_OUTPUT_REPORT 사용합니다.

    기본값은 0입니다. 기본 전송이 USB가 아닌 경우(예: BTH를 통해 HID)로 설정합니다.

    OfferInputValueCapabilityUsageRangeMinimum 제품 입력 보고서 처리에 대한 값 기능 사용 최소값입니다.
    OfferOutputValueCapabilityUsageRangeMinimum 제품 출력 보고서 처리에 대한 값 기능 사용 최소값입니다.
    PayloadInputValueCapabilityUsageRangeMinimum 페이로드 입력 보고서 처리에 대한 값 기능 사용 최소값입니다.
    PayloadOutputValueCapabilityUsageRangeMinimum 페이로드 출력 보고서 처리에 대한 값 기능 사용량 최소값입니다.
    VersionsFeatureValueCapabilityUsageRangeMinimum 버전 기능 보고서 처리에 대한 값 기능 사용 최소값입니다.

    INF 값 기능 설정

    CFU 받은 편지함 드라이버가 펌웨어와 통신하려면 INF에 지정된 값 기능 사용량이 펌웨어의 Hid 설명자 구성에 있는 것과 일치해야 합니다.

    이 예제에서 INF 값은 가상 펌웨어 시뮬레이션 드라이버의 Hid 설명자에 지정된 값과 일치합니다.

    [CfuVirtualHidDeviceFwUpdate_HWAddReg]
    ...
    ...
    HKR,,OfferInputValueCapabilityUsageRangeMinimum,0x00010001,0x1A
    HKR,,OfferOutputValueCapabilityUsageRangeMinimum,0x00010001, 0x1E
    HKR,,PayloadInputValueCapabilityUsageRangeMinimum,0x00010001,0x26
    HKR,,PayloadOutputValueCapabilityUsageRangeMinimum,0x00010001,0x31
    HKR,,VersionsFeatureValueCapabilityUsageRangeMinimum,0x00010001, 0x42
    

    자세한 내용은 DmfInterface.cg_CfuVirtualHid_HidReportDescriptor(Hid Report Descriptor)의 다음 코드를 참조하세요.

    0x85, REPORT_ID_PAYLOAD_INPUT,      // REPORT_ID(34)
    0x75, INPUT_REPORT_LENGTH,          // REPORT SIZE(32)
    0x95, 0x04,                         // REPORT COUNT(4)
    0x19, PAYLOAD_INPUT_USAGE_MIN,      // USAGE MIN (0x26)
    0x29, PAYLOAD_INPUT_USAGE_MAX,      // USAGE MAX (0x29)
    0x81, 0x02,                         // INPUT(0x02)
    
    0x85, REPORT_ID_OFFER_INPUT,        // REPORT_ID(37)
    0x75, INPUT_REPORT_LENGTH,          // REPORT SIZE(32)
    0x95, 0x04,                         // REPORT COUNT(4)
    0x19, OFFER_INPUT_USAGE_MIN,        // USAGE MIN (0x1A)
    0x29, OFFER_INPUT_USAGE_MAX,        // USAGE MAX (0x1D)
    0x81, 0x02,                         // INPUT(0x02)
    
    0x85, REPORT_ID_PAYLOAD_OUTPUT,     // REPORT_ID(32)
    0x75, 0x08,                         // REPORT SIZE(8)
    0x95, OUTPUT_REPORT_LENGTH,         // REPORT COUNT(60)
    0x09, PAYLOAD_OUTPUT_USAGE,         // USAGE(0x31)
    0x92, 0x02, 0x01,                   // OUTPUT(0x02)
    
    0x85, REPORT_ID_OFFER_OUTPUT,       // REPORT_ID(37)
    0x75, INPUT_REPORT_LENGTH,          // REPORT SIZE(32)
    0x95, 0x04,                         // REPORT COUNT(4)
    0x19, OFFER_OUTPUT_USAGE_MIN,       // USAGE MIN (0x1E)
    0x29, OFFER_OUTPUT_USAGE_MAX,       // USAGE MAX (0x21)
    0x91, 0x02,                         // OUTPUT(0x02)
    
    0x85, REPORT_ID_VERSIONS_FEATURE,   // REPORT_ID(32)
    0x75, 0x08,                         // REPORT SIZE(8)
    0x95, FEATURE_REPORT_LENGTH,        // REPORT COUNT(60)
    0x09, VERSIONS_FEATURE_USAGE,       // USAGE(0x42)
    0xB2, 0x02, 0x01,                   // FEATURE(0x02)
    

Windows 업데이트 통해 펌웨어 패키지 배포

다음으로, Windows 업데이트 통해 패키지를 배포합니다.

배포에 대한 자세한 내용은 Windows 10 드라이버 게시 워크플로(DOCX 다운로드)를 참조하세요.

펌웨어 업데이트 이미지 파일 형식

펌웨어 업데이트 이미지에는 제품 파일과 페이로드 파일의 두 부분이 있습니다. 이 제품에는 업데이트를 수신하는 디바이스의 기본 구성 요소가 페이로드가 허용되는지 여부를 결정할 수 있도록 페이로드에 대한 필요한 정보가 포함되어 있습니다. 페이로드는 주 구성 요소에서 사용할 수 있는 주소 및 바이트 범위입니다.

제품 형식

제안 파일은 CFU 프로토콜 사양의 섹션 5.5.1에 지정된 형식과 구조가 일치해야 하는 16바이트 이진 데이터입니다.

페이로드 형식

페이로드 파일은 연속적으로 저장되는 레코드 컬렉션인 이진 파일입니다. 각 레코드의 형식은 다음과 같습니다.

Offset 크기 Description
바이트 0 DWORD 펌웨어 주소 데이터를 쓰는 Little Endian(LSB First) 주소입니다. 주소는 0 기반입니다. 펌웨어는 이를 오프셋으로 사용하여 이미지를 메모리에 배치할 때 필요에 따라 주소를 결정할 수 있습니다.
바이트 4 Byte 길이 페이로드 데이터의 길이입니다.
바이트 5-N 바이트 데이터 페이로드 데이터의 바이트 배열입니다.

펌웨어 업데이트 상태

프로토콜 트랜잭션 중에 CFU 받은 편지함 드라이버는 레지스트리 항목을 작성하여 상태 나타냅니다. 이 표에서는 프로토콜의 다양한 단계에서 드라이버가 터치하는 값의 이름, 값 형식 및 의미를 설명합니다.

  • 테이블의 _ID_는 제품 파일에서 검색되는 구성 요소 ID를 나타냅니다. 사양에 설명된 대로 구성 요소 ID는 각 구성 요소를 고유하게 식별합니다.

  • 값 DWORD에 대한 자세한 내용은 사양을 참조하세요.

단계 위치 Reg 값 이름 값(DWORD)
시작; 사전 제안. {디바이스 하드웨어 키}\ComponentFirmwareUpdate "구성 요소IDCurrentFwVersion" 디바이스의 버전
{디바이스 하드웨어 키}\ComponentFirmwareUpdate "구성 요소IDFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_NOT_STARTED
제공; 제품을 보내려고 합니다. {디바이스 하드웨어 키}\ComponentFirmwareUpdate "구성 요소IDOfferFwVersion" 디바이스로 전송(또는 보낼 버전)입니다.
제품 응답(거부됨) {디바이스 하드웨어 키}\ComponentFirmwareUpdate "구성 요소IDFirmwareUpdateStatusRejectReason" 디바이스에서 반환된 거부 이유입니다.
제품 응답(디바이스 사용 중) {디바이스 하드웨어 키}\ComponentFirmwareUpdate "구성 요소IDFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_BUSY_PROCESSING_UPDATE
제품 응답(수락됨); 페이로드를 보내려고 합니다. {디바이스 하드웨어 키}\ComponentFirmwareUpdate "구성 요소IDFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_DOWNLOADING_UPDATE
페이로드가 수락되었습니다. {디바이스 하드웨어 키}\ComponentFirmwareUpdate "구성 요소IDFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_PENDING_RESET
모든 단계에서 오류가 발생했습니다. {디바이스 하드웨어 키}\ComponentFirmwareUpdate "구성 요소IDFirmwareUpdateStatus" FIRMWARE_UPDATE_STATUS_ERROR

샘플 CFU INF 파일

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;  Copyright (c) Microsoft Corporation.  All rights reserved.
;
;      THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
;      KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
;      IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
;      PURPOSE.
;
; File:
;
:      CfuVirtualHidDeviceFwUpdate.inx
;
; Description:
;
;      Sample INF file for Cfu virtual Hid device firmware update.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[Version]
Signature="$Windows NT$"
Class=Firmware
ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
Provider=%ManufacturerName%
CatalogFile=CfuVirtualHidDeviceFwUpdate.cat
DriverVer = 12/16/2019,11.42.16.703
PnPLockDown=1

[SourceDisksNames]
1= %DiskName%

[DestinationDirs]
CfuVirtualHidDeviceFwUpdate.CopyFiles=13

[Manufacturer]
%ManufacturerName%=Standard,NTamd64

[Standard.NTamd64]
%CfuVirtualHidDeviceFwUpdate.DeviceDesc%=CfuVirtualHidDeviceFwUpdate, HID\VID_045E&UP:FA00_U:00F5 ; HardwareID for VirtualHidDevice MCU

[CfuVirtualHidDeviceFwUpdate.NT]
Include            = HidCfu.inf
Needs              = HidCfu.NT
CopyFiles          = CfuVirtualHidDeviceFwUpdate.CopyFiles

[CfuVirtualHidDeviceFwUpdate.NT.Wdf]
Include            = HidCfu.inf
Needs              = HidCfu.NT.Wdf

[CfuVirtualHidDeviceFwUpdate.NT.HW]
AddReg = CfuVirtualHidDeviceFwUpdate_HWAddReg

[CfuVirtualHidDeviceFwUpdate_HWAddReg]
HKR,,FriendlyName,,%FwUpdateFriendlyName%
HKR,,Alignment,0x00010001, 1                       ; (No Alignment)
HKR,,OfferInputValueCapabilityUsageRangeMinimum,0x00010001,0x1A
HKR,,OfferOutputValueCapabilityUsageRangeMinimum,0x00010001, 0x1E
HKR,,PayloadInputValueCapabilityUsageRangeMinimum,0x00010001,0x26
HKR,,PayloadOutputValueCapabilityUsageRangeMinimum,0x00010001,0x31
HKR,,VersionsFeatureValueCapabilityUsageRangeMinimum,0x00010001, 0x42

; Specify the location of the firmware offer and payload file in the registry.
; The files are kept in the driver store.
; When deployed, %13% would be expanded to the actual path
; in driver store.
;
; You can change subkey name under CFU (e.g. "CfuVirtualHidDevice_MCU"), and specify your own offer
; (e.g. "CfuVirtualHidDevice_MCU.offer.bin") and payload (e.g "CfuVirtualHidDevice_MCU.payload.bin") file name.
;
HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_MCU,Offer,   0x00000000, %13%\CfuVirtualHidDevice_MCU.offer.bin
HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_MCU,Payload, 0x00000000, %13%\CfuVirtualHidDevice_MCU.payload.bin
HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_Audio,Offer,   0x00000000, %13%\CfuVirtualHidDevice_Audio.offer.bin
HKR,A410A898-8132-4246-AC1A-30F1E98BB0A4\CfuVirtualHidDevice_Audio,Payload, 0x00000000, %13%\CfuVirtualHidDevice_Audio.payload.bin

[SourceDisksFiles]
CfuVirtualHidDevice_MCU.offer.bin=1
CfuVirtualHidDevice_MCU.payload.bin=1
CfuVirtualHidDevice_Audio.offer.bin=1
CfuVirtualHidDevice_Audio.payload.bin=1

[CfuVirtualHidDeviceFwUpdate.CopyFiles]
CfuVirtualHidDevice_MCU.offer.bin
CfuVirtualHidDevice_MCU.payload.bin
CfuVirtualHidDevice_Audio.offer.bin
CfuVirtualHidDevice_Audio.payload.bin

[CfuVirtualHidDeviceFwUpdate.NT.Services]
Include            = HidCfu.inf
Needs              = HidCfu.NT.Services

; =================== Generic ==================================

[Strings]
ManufacturerName="Surface"
CfuVirtualHidDeviceFwUpdate.DeviceDesc = "CfuVirtualHidDevice Firmware Update"
DiskName = "CfuVirtualHidDevice Firmware Update Installation Disk"
FwUpdateFriendlyName= "CfuVirtualHidDevice Firmware Update"

문제 해결

  1. Windows WPP(소프트웨어 추적 전처리기) 로그를 확인하여 구성 요소당 드라이버 쪽 상호 작용을 확인합니다.

  2. 이벤트 로그에 중요한 오류가 있는지 확인합니다.

  3. 드라이버에서 제공하는 펌웨어 업데이트 상태 설명된 부기 레지스트리 항목을 확인합니다.

FAQ

업데이트가 필요한 구성 요소 A가 있습니다. CFU 드라이버가 구성 요소 A를 인식하게 하려면 어떻게 해야 하나요?

구성 요소 A에서 만든 TLC의 하드웨어 ID를 사용하여 CFU 받은 편지함 드라이버 INF를 구성해야 합니다.

구성 요소 A와 하위 구성 요소 B의 두 가지 구성 요소가 있습니다. CFU 드라이버가 구성 요소 B를 인식하게 하려면 어떻게 해야 하나요?

당신은 할 필요가 없습니다. 드라이버는 구성 요소 계층 구조에 대해 알 필요가 없습니다. 기본 구성 요소와 상호 작용합니다.

내 구성 요소 A로 보내야 하는 내 펌웨어 파일(제품, 페이로드) 파일에 대해 드라이버가 인식하도록 하려면 어떻게 해야 하나요?

펌웨어 파일 정보는 INF에서 레지스트리 값으로 설정됩니다.

기본 구성 요소 A 및 해당 하위 구성 요소에 대한 많은 펌웨어 파일, 여러 제품, 페이로드가 있습니다. 어떤 펌웨어 파일이 어떤 구성 요소에 대한 것인지 드라이버를 어떻게 인식해야 하나요?

펌웨어 파일 정보는 INF에서 레지스트리 값으로 설정됩니다.

펌웨어 업데이트에 드라이버를 사용하고 있습니다. 업데이트가 성공했는지 어떻게 할까요??

펌웨어 업데이트 상태 예약의 일부로 레지스트리의 드라이버에 의해 업데이트됩니다.

추가 리소스

WDF(Windows 드라이버 파운데이션)를 사용하여 Windows 드라이버를 개발하는 방법에 대해 알아봅니다.