WinUSB 장치

이 항목에서는 WinUSB 장치가 Windows 8에서 인식되는 방식에 대해 알아봅니다.

이 항목의 정보는 Winusb.sys를 기능 드라이버로 사용하고 사용자 지정 INF를 제공할 필요 없이 자동으로 드라이버를 로드할 장치를 개발하는 OEM이나 IHV(Independent Hardware Vendor)인 경우에 적용됩니다.

WinUSB 장치란?

WinUSB 장치란 펌웨어에서 호환 가능 ID를 "WINUSB"로 보고하는 특정 Microsoft OS(운영 체제) 기능 설명자를 정의하는 USB(범용 직렬 버스) 장치입니다.

WinUSB 장치의 용도는 Windows에서 사용자 지정 INF 파일을 사용하지 않고 Winusb.sys를 장치의 기능 드라이버로 로드할 수 있도록 하는 것입니다. WinUSB 장치의 경우 장치에 대한 INF 파일을 배포할 필요가 없으므로 최종 사용자의 드라이버 설치 프로세스가 간단해집니다. 반대로 사용자 지정 INF를 제공해야 하는 경우에는 장치를 WinUSB 장치로 정의하고 INF에서 장치의 하드웨어 ID를 지정하면 안 됩니다.

Microsoft는 Winusb.sys를 USB 장치용 장치 드라이버로 설치하는 데 필요한 정보가 들어 있는 Winusb.inf를 제공합니다.

Windows 8 이전에는 Winusb.sys를 기능 드라이버로 로드하려면 사용자 지정 INF를 제공해야 했습니다. 사용자 지정 INF는 장치별 하드웨어 ID를 지정하며 Windows 제공 Winusb.inf의 섹션도 포함합니다. 해당 섹션은 서비스를 인스턴스화하고 Windows 제공 바이너리를 복사하며 응용 프로그램에서 장치를 찾아 통신하는 데 필요한 장치 인터페이스 GUID를 등록하는 데 필요합니다. 사용자 지정 INF 작성에 대한 자세한 내용은 WinUSB(Winusb.sys) 설치를 참조하세요.

Windows 8에서는 Windows 제공 Winusb.inf 파일이 업데이트되어 Windows에서 INF를 WinUSB 장치와 자동으로 일치시킬 수 있게 되었습니다.

Windows 제공 Winusb.inf를 사용하여 WinUSB 장치 설치

Windows 8에서는 Windows 제공 Winusb.inf 파일이 업데이트되었습니다. INF에는 "USB\MS_COMP_WINUSB"라는 호환 가능 ID를 참조하는 설치 섹션이 포함되어 있습니다.

[Generic.Section.NTamd64]

%USB\MS_COMP_WINUSB.DeviceDesc%=WINUSB,USB\MS_COMP_WINUSB

업데이트된 INF에도 "USBDevice"라는 새로운 설치 클래스가 포함되어 있습니다.

"USBDevice" 설치 클래스는 Microsoft가 Windows 제공 드라이버를 제공하지 않는 장치에 사용할 수 있습니다. 일반적으로 이러한 장치는 오디오, Bluetooth 등의 잘 정의된 USB 클래스에 속하지 않으며 사용자 지정 드라이버가 필요합니다. WinUSB 장치일 경우 해당 장치가 USB 클래스에 속하지 않을 수 있습니다. 따라서 장치를 "USBDevice" 설치 클래스 아래에 설치해야 합니다. 업데이트된 Winusb.inf는 해당 요구 사항을 쉽게 충족합니다.

USBDevice 클래스 사용 정보:  

구분되지 않은 장치에 "USB" 설치 클래스를 사용하지 마세요. 해당 클래스는 컨트롤러, 허브 및 복합 장치 설치용으로 예약되어 있습니다. "USB" 클래스를 잘못 사용하면 심각한 안정성 및 성능 문제가 발생할 수 있습니다. 구분되지 않은 장치에는 "USBDevice"를 사용하세요.

Windows 8에서 "USBDevice" 장치 클래스를 사용하려면 다음을 INF에 추가하면 됩니다.

[Version]

[Version]

Class=USBDevice

ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}

장치 관리자에서 새 노드 USB 범용 직렬 버스 장치가 표시되고 해당 노드 아래에 장치가 표시됩니다.

Windows 7에서는 이전 행 외에 INF에서 다음 레지스트리 설정을 만들어야 합니다.

;---------- 레지스트리 추가 섹션 ----------

[USBDeviceClassReg]

HKR,,,,"Universal Serial Bus devices"

HKR,,NoInstallClass,,1

HKR,,SilentInstall,,1

HKR,,IconPath,%REG_MULTI_SZ%," %systemroot%\system32\setupapi.dll,-20"

장치 관리자에서 USB 범용 직렬 버스 장치 아래에 장치가 표시됩니다. 그러나 장치 클래스 설명은 INF에 지정된 레지스트리 설정에서 파생됩니다.

-Eliyas Yakub, Microsoft Windows USB 핵심 팀

 

"USBDevice" 클래스는 WinUSB로 제한되지 않습니다. 장치에 대한 사용자 지정 드라이버가 있는 경우 사용자 지정 INF에서 "USBDevice" 설치 클래스를 사용할 수 있습니다.

장치를 열거하는 동안 USB 드라이버 스택은 장치에서 호환 가능 ID를 읽습니다. 호환 가능 ID가 "WINUSB"이면 Windows에서 해당 ID를 장치 식별자로 사용하고 업데이트된 Windows 제공 Winusb.inf에서 일치하는 항목을 찾은 다음 Winusb.sys를 장치의 기능 드라이버로 로드합니다.

다음 이미지는 WinUSB 장치로 정의되어 Winusb.sys가 장치용 기능 드라이버로 로드되는 단일 인터페이스 MUTT 장치에 대한 것입니다.

WinUSB 장치를 보여 주는 장치 관리자입니다.

Windows 8 이전의 Windows 버전인 경우 업데이트된 Winusb.inf는 Windows 업데이트를 통해 사용할 수 있습니다. 컴퓨터가 드라이버 업데이트를 자동으로 받도록 구성된 경우 WinUSB 드라이버는 새 INF 패키지를 사용하여 사용자 작업 없이 설치됩니다.

WinUSB 장치에 대한 장치 설명을 변경하는 방법

WinUSB 장치인 경우 장치 설명으로 "WinUsb 장치"가 장치 관리자에 표시됩니다. 해당 문자열은 Winusb.inf에서 파생됩니다. 여러 개의 WinUSB 장치가 있는 경우 모든 장치의 장치 설명이 동일합니다.

장치 관리자에서 장치를 고유하게 식별하고 차별화하기 위해 Windows 8은 시스템이 INF의 설명보다 장치에서 보고한 장치 설명(iProduct 문자열 설명자)에 우선 순위를 부여하도록 지시하는 새로운 속성을 장치 클래스에서 제공합니다. Windows 8에서 정의된 "USBDevice" 클래스는 이 속성을 설정합니다. 즉, 장치가 "USBDevice" 클래스 아래에 설치되면 시스템은 장치에서 장치 설명을 쿼리하고 장치 관리자 문자열을 쿼리에서 검색된 항목으로 설정합니다. 이런 경우 INF에서 제공된 장치 설명은 무시됩니다. 위 이미지에서 장치 설명 문자열 "MUTT"를 확인하세요. 이 문자열은 USB 장치에서 제품 문자열 설명자로 제공됩니다.

새 클래스 속성은 이전 버전의 Windows에서 지원되지 않습니다. 이전 버전의 Windows에서 사용자 지정된 장치 설명을 사용하려면 고유한 사용자 지정 INF를 작성해야 합니다.

WinUSB 장치를 구성하는 방법

USB 장치를 WinUSB 장치로 식별하려면 장치 펌웨어에 이러한 Microsoft OS 설명자가 있어야 합니다.

확장된 기능 설명자 지원

USB 드라이버 스택에서 장치가 확장된 기능 설명자를 지원하는지 알아보려면 장치에서 문자열 인덱스 0xEE에 저장된 OS 문자열 설명자를 정의해야 합니다. 열거하는 동안 드라이버 스택은 문자열 설명자를 쿼리합니다. 설명자가 있으면 드라이버 스택은 장치에 하나 이상의 OS 기능 설명자와 해당 기능 설명자를 검색하는 데 필요한 데이터가 포함되어 있는 것으로 가정합니다.

검색된 문자열 설명자에는 bMS_VendorCode 필드 값이 있습니다. 이 값은 USB 드라이버 스택이 확장된 기능 설명자를 검색하는 데 사용해야 하는 공급업체 코드를 나타냅니다.

OS 문자열 설명자를 정의하는 방법에 대한 자세한 내용은 Microsoft OS 설명자 사양에서 "OS 문자열 설명자"를 참조하세요.

호환 가능 ID 설정

Windows 제공 Winusb.inf와 일치시키고 WinUSB 드라이버 모듈을 로드하는 데 필요한 확장된 호환 ID OS 기능 설명자입니다.

장치가 복합 장치인지 비복합 장치인지에 따라 확장된 호환 ID OS 기능 설명자에는 헤더 섹션과 하나 이상의 기능 섹션이 있습니다. 헤더 섹션은 전체 설명자의 길이, 기능 섹션의 수 및 버전 번호를 지정합니다. 비복합 장치인 경우 헤더 뒤에는 장치의 유일한 인터페이스와 관련된 하나의 기능 섹션이 옵니다. 해당 섹션의 compatibleID 필드는 "WINUSB"를 필드 값으로 지정해야 합니다. 복합 장치인 경우 여러 개의 기능 섹션이 있습니다. 각 기능 섹션의 compatibleID 필드는 "WINUSB"를 지정해야 합니다.

장치 인터페이스 GUID 등록

장치 인터페이스 GUID를 등록하는 데 필요한 확장 속성 OS 기능 설명자입니다. GUID는 응용 프로그램 또는 서비스에서 장치를 찾고 장치를 구성하며 I/O 작업을 수행하는 데 필요합니다.

이전 버전의 Windows에서는 사용자 지정 INF를 통해 장치 인터페이스 GUID 등록이 수행되었습니다. Windows 8부터는 장치에서 확장 속성 OS 기능 설명자를 사용하여 인터페이스 GUID를 보고해야 합니다.

확장 속성 OS 기능 설명자에는 헤더 섹션과 그다음에 오는 하나 이상의 사용자 지정 속성 섹션이 있습니다. 헤더 섹션에서는 총 길이, 버전 번호 및 사용자 지정 속성 섹션 수를 비롯한 전체 확장 속성 설명자에 대해 설명합니다. 장치 인터페이스 GUID를 등록하려면 bPropertyName 필드는 "DeviceInterfaceGUID"로 설정하고 wPropertyNameLength를 40바이트로 설정하는 사용자 지정 속성 섹션을 추가합니다. GUID 생성기를 사용하여 고유한 장치 인터페이스 GUID를 생성하고 bPropertyData 필드를 해당 GUID(예: "{8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}")로 설정합니다. GUID는 유니코드 문자열로 지정되며 문자열 길이는 78바이트(null 종결자 포함)입니다.

bPropertyData78바이트

7B 00 38 00 46 00 45 00 36 00 44 00 34 00 44 00 37 00 2D 00 34 00 39 00 00 44 00 2D 00 34 00 31 00 45 00 37 00 2D 00 39 00 34 00 38 00 36 00 2D 00 34 00 39 00 41 00 46 00 43 00 36 00 42 00 46 00 45 00 34 00 37 00 35 00 7D 00 00 00

속성 값은 {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}입니다.

 

장치를 열거하는 동안 USB 드라이버 스택은 확장 속성 OS 기능 설명자에서 DeviceInterfaceGUID 값을 검색하고 장치의 하드웨어 키에 장치를 등록합니다. 응용 프로그램은 SetupDiXxx API(SetupDiOpenDevRegKey 참조)를 사용하여 값을 검색할 수 있습니다. 자세한 내용은 WinUSB 함수를 사용하여 USB 장치에 액세스하는 방법을 참조하세요.

WinUSB 전원 관리 기능을 사용하거나 사용하지 않도록 설정

Windows 8 이전에는 WinUSB의 전원 관리 기능을 구성하려면 사용자 지정 INF의 HW.AddReg 섹션에서 레지스트리 항목 값을 작성해야 했습니다.

Windows 8에서는 장치에서 전원 설정을 지정할 수 있습니다. 해당 장치에 대한 WinUSB에서 기능을 사용하거나 사용하지 않도록 설정하는 확장 속성 OS 기능 설명자를 통해 값을 보고할 수 있습니다. 선택적 절전 모드와 시스템 절전 모드 해제라는 두 가지 기능을 구성할 수 있습니다. 선택적 절전 모드에서는 장치가 유휴 상태일 때 절전 상태로 전환할 수 있습니다. 시스템 절전 모드 해제는 시스템이 절전 상태일 때 시스템 절전 모드를 해제하는 장치의 기능을 나타냅니다.

WinUSB의 전원 관리 기능에 대한 자세한 내용은 WinUSB 전원 관리를 참조하세요.

속성 이름설명
DeviceIdleEnabled이 값은 1로 설정되어 장치가 유휴 상태일 때 전원을 끌 수 있음(선택적 절전 모드)을 나타냅니다.
DefaultIdleState이 값은 1로 설정되어 기본적으로 장치가 유휴 상태일 때 일시 중단할 수 있음을 나타냅니다.
DefaultIdleTimeout이 값은 5000(밀리초)으로 설정되어 장치가 유휴 상태임을 확인할 때까지 대기하는 시간(밀리초)을 나타냅니다.
UserSetDeviceIdleEnabled이 값은 1로 설정되어 USB 선택적 절전 모드를 사용하거나 사용하지 않도록 설정하는 장치의 기능을 사용자가 제어할 수 있도록 합니다. 사용자는 장치 전원 관리 속성 페이지에서 전원을 절약하기 위해 컴퓨터가 이 장치를 끌 수 있음 확인란을 선택하거나 선택 취소하여 USB 선택적 절전 모드를 사용하거나 사용하지 않도록 설정할 수 있습니다.
SystemWakeEnabled이 값은 1로 설정되어 시스템에서 절전 상태를 해제하는 장치의 기능을 사용자가 제어할 수 있도록 합니다. 설정하면 이 장치를 사용하여 컴퓨터의 대기 모드를 종료할 수 있음 확인란이 장치 전원 관리 속성 페이지에 나타납니다. 사용자는 이 확인란을 선택하거나 선택 취소하여 USB 시스템 절전 모드 해제를 사용하거나 사용하지 않도록 설정할 수 있습니다.

 

예를 들어 장치에서 선택적 절전 모드를 사용하도록 설정하려면 bPropertyName 필드를 유니코드 문자열로 설정하고 "DeviceIdleEnabled" 및 wPropertyNameLength를 36바이트로 설정하는 사용자 지정 속성 섹션을 추가합니다. bPropertyData 필드를 "0x00000001"로 설정합니다. 속성 값은 little-endian 32비트 정수로 저장됩니다.

열거하는 동안 USB 드라이버 스택은 확장 속성 기능 설명자를 읽고 다음 키 아래에 레지스트리 항목을 만듭니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\<Device Identifier>\<Instance Identifier>\Device Parameters

다음 이미지는 WinUSB 장치의 샘플 설정을 보여 줍니다.

Hh450799.winusb_device_reg(ko-kr,VS.85).png

추가 예제는 Microsoft OS 설명자 사양을 참조하세요.

관련 항목

Microsoft 정의 USB 설명자

 

 

표시:
© 2014 Microsoft