WinUSB(Winusb.sys) 설치

단일 응용 프로그램만 액세스하는 장치와 같은 특정 USB(범용 직렬 버스)의 경우 드라이버를 구현하지 않고 WinUSB(Winusb.sys)를 장치의 커널 모드 스택에 USB 장치 기능 드라이버로 설치할 수 있습니다.

이 항목은 다음과 같은 섹션으로 구성되어 있습니다.

INF 파일 없이 WinUSB 자동 설치

OEM 또는 IHV(Independent Hardware Vendor)는 Windows 8 이상 버전의 운영 체제에서 Winusb.sys가 자동으로 설치되도록 장치를 빌드할 수 있습니다. 이러한 장치를 WinUSB 장치라고 하며, WinUSB 장치를 사용하면 Windows 제공 Winusb.inf를 참조하는 사용자 지정 INF 파일을 작성할 필요가 없습니다.

WinUSB 장치를 연결하면 시스템은 장치 정보를 읽고 Winusb.sys를 자동으로 로드합니다.

자세한 내용은 WinUSB 장치를 참조하세요.

시스템에서 제공하는 장치 클래스를 지정하여 WinUSB 설치

장치를 연결하면 Windows에서 Winusb.sys를 자동으로 로드합니다(IHV가 장치를 WinUSB 장치로 정의한 경우). 그렇지 않은 경우 다음 지침에 따라 드라이버를 로드합니다.

  1. 장치를 호스트 시스템에 연결합니다.
  2. 장치 관리자를 열고 장치를 찾습니다.
  3. 장치를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 드라이버 소프트웨어 업데이트...를 선택합니다.
  4. 마법사에서 내 컴퓨터에서 드라이버 소프트웨어 찾아보기를 선택합니다.
  5. 컴퓨터의 장치 드라이버 목록에서 직접 선택을 선택합니다.
  6. 장치 클래스 목록에서 범용 직렬 버스 장치를 선택합니다.
  7. WinUsb 장치가 표시됩니다. 이 장치를 선택하여 드라이버를 로드합니다.
범용 직렬 버스 장치가 장치 클래스 목록에 표시되지 않는 경우 INF를 사용하여 드라이버를 설치해야 합니다.

앞의 절차에서는 장치에 액세스하기 위한 앱(Windows 스토어 앱 또는 Windows 데스크톱 앱)의 장치 인터페이스 GUID를 추가하지 않습니다. 다음 절차에 따라 GUID를 수동으로 추가해야 합니다.

  1. 앞의 절차에 설명된 대로 드라이버를 로드합니다.
  2. guidgen.exe와 같은 도구를 사용하여 장치의 장치 인터페이스 GUID를 생성합니다.
  3. 다음 키 아래에서 장치의 레지스트리 키를 찾습니다.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<VID_vvvv&PID_pppp>

  4. 장치 매개 변수 키 아래에 DeviceInterfaceGUID라는 문자열 레지스트리 항목 또는 DeviceInterfaceGUIDs라는 다중 문자열 항목을 추가합니다. 값을 2단계에서 생성한 GUID로 설정합니다.
  5. 장치와 시스템의 연결을 끊고 동일한 물리적 포트에 장치를 다시 연결합니다.

    참고  물리적 포트를 변경하는 경우 1-4단계를 반복해야 합니다.

WinUSB 설치를 위한 사용자 지정 INF 작성

드라이버 패키지의 일부로 Winusb.sys를 USB 장치의 기능 드라이버로 설치하는 .inf 파일을 제공합니다.

다음 예제 .inf 파일은 섹션 이름의 USB_Install을 적절한 DDInstall 값으로 변경하는 등의 일부 수정이 포함된 대부분 USB 장치에 대한 WinUSB 설치를 보여 줍니다. 필요에 따라 버전, 제조업체 및 모델 섹션도 변경해야 합니다. 예를 들어 장치에 대한 적절한 제조업체 이름, 서명된 카탈로그 파일 이름, 올바른 장치 클래스 및 VID(공급업체 식별자)/PID(제품 식별자)를 제공합니다.

또한 설치 클래스가 "USBDevice"로 설정되어 있는지 확인합니다. 공급업체에서는 다른 클래스에 속하지 않고 USB 호스트 컨트롤러 또는 허브가 아닌 장치에 대한 "USBDevice" 설치 클래스를 사용할 수 있습니다.

WinUSB를 USB 복합 장치의 기능 중 하나에 대한 기능 드라이버로 설치하는 경우 INF에 기능과 연결된 하드웨어 ID를 제공해야 합니다. 장치 관리자에서 devnode 속성에서 기능에 대한 하드웨어 ID를 가져올 수 있습니다. 하드웨어 ID 문자열 형식은 "USB\VID_vvvv&PID_pppp"입니다.

다음 INF는 WinUSB를 OSR USB FX2 보드의 기능 드라이버로 x64 기반 시스템에 설치합니다.


;
;
; Installs WinUsb
;

[Version]
Signature = "$Windows NT$"
Class     = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider  = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer=09/04/2012,13.54.20.543

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; ========== Class definition ===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

; [DestinationDirs]
; If your INF needs to copy files, you must not use the DefaultDestDir directive here.  
; You must explicitly reference all file-list-section names in this section.

; =================== Strings ===================

[Strings]
ManufacturerName=""
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
REG_MULTI_SZ = 0x00010000


장치별 값 및 다음 목록에 나열된 여러 문제를 제외하고 이러한 섹션과 지시문을 사용하여 USB 장치에 대해 WinUSB를 설치할 수 있습니다. 이러한 목록 항목은 이전 .inf 파일의 IncludesDirectives에 대해 설명합니다.

  • USB_Install: WinUSB를 설치하려면 USB_Install 섹션의 IncludeNeeds 지시문이 필요합니다. 이러한 지시문을 수정하면 안 됩니다.
  • USB_Install.Services: USB_Install.Services 섹션의 Include 지시문에는 WinUSB에 대한 시스템 제공 .inf(WinUSB.inf)가 포함되어 있습니다. 이 .inf 파일은 아직 대상 시스템에 없는 경우 WinUSB 공동 설치 프로그램을 통해 설치됩니다. Needs 지시문은 Winusb.sys를 장치 기능 드라이버로 설치하는 데 필요한 정보가 포함된 섹션을 WinUSB.inf 내에 지정합니다. 이러한 지시문을 수정하면 안 됩니다.

    참고  Windows XP에서는 WinUSB.inf를 제공하지 않으므로 공동 설치 프로그램에서 파일을 Windows XP 시스템으로 복사하거나 Windows XP에 대한 별도의 데코레이트된 섹션을 제공해야 합니다.

  • USB_Install.HW: 이 섹션은 .inf 파일의 키입니다. 이 키는 장치에 대한 장치 인터페이스 GUID(Globally Unique IDentifier)를 지정합니다. AddReg 지시문은 표준 레지스트리 값에 지정된 인터페이스 GUID를 설정합니다. Winusb.sys가 장치 기능 드라이버로 로드되면 레지스트리 값 DeviceInterfaceGUIDs 키를 읽고 지정된 GUID를 사용하여 장치 인터페이스를 나타냅니다. 이 예제의 GUID를 장치 전용으로 만든 GUID로 바꿉니다. 장치용 프로토콜이 변경되면 새 장치 인터페이스 GUID를 만듭니다.

    참고  사용자 모드 소프트웨어는 SetupDiGetClassDevs를 호출하여 DeviceInterfaceGUIDs 키 아래에 지정되니 장치 인터페이스 클래스 중 하나와 연결된 등록된 장치 인터페이스를 열거합니다. SetupDiGetClassDevs는 사용자 모드 소프트웨어가 장치 인터페이스의 WinUSB 핸들을 가져오기 위해 WinUsb_Initialize 루틴에 전달해야 하는 장치의 장치 핸들을 반환합니다. 이러한 루틴에 대한 자세한 내용은 WinUSB 함수를 사용하여 USB 장치에 액세스하는 방법을 참조하세요.

다음 INF는 WinUSB를 OSR USB FX2 보드의 기능 드라이버로 x64 기반 시스템에 설치합니다. 예제에서는 WDF 공동 설치 프로그램이 있는 INF를 보여 줍니다.


;
;
; Installs WinUsb
;

[Version]
Signature = "$Windows NT$"
Class     = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider  = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer=09/04/2012,13.54.20.543

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; ========== Class definition ===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

[USB_Install.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles

[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01011.dll,WdfCoInstaller","WinUsbCoInstaller2.dll"

[CoInstallers_CopyFiles]
WinUsbCoInstaller2.dll
WdfCoInstaller01011.dll

[DestinationDirs]
; If your INF needs to copy files, you must not use the DefaultDestDir directive here.  
CoInstallers_CopyFiles=11
; ================= Source Media Section =====================

[SourceDisksNames]
1 = %DiskName%

[SourceDisksFiles]
WinUsbCoInstaller2.dll=1
WdfCoInstaller01011.dll=1


; =================== Strings ===================

[Strings]
ManufacturerName=""
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
REG_MULTI_SZ = 0x00010000


  • USB_Install.CoInstallers: 참조되는 AddRegCopyFiles 섹션이 포함된 이 섹션에는 WinUSB 및 KMDF 공동 설치 프로그램을 설치하고 이를 장치와 연결하기 위한 데이터와 지침이 있습니다. 대부분의 USB 장치에서 이러한 섹션과 지시문을 수정 없이 사용할 수 있습니다.
  • Windows x86 기반 및 x64 기반 버전에는 개별 공동 설치 프로그램이 있습니다.

    참고  각 공동 설치 프로그램에는 무료 및 확인된 버전이 있습니다. 무료 버전을 사용하여 WinUSB를 모든 정품 버전을 비롯하여 Windows의 무료 빌드에 설치합니다. 확인된 버전("_chk" 접미사 포함)을 사용하여 Windows의 확인된 빌드에 WinUSB를 설치합니다.

Winusb.sys가 로드될 때마다 레지스트리에서 DeviceInterfaceGUIDs 키 아래에 지정된 장치 인터페이스 클래스가 있는 장치 인터페이스를 등록합니다.

HKR,,DeviceInterfaceGUIDs, 0x10000,"{D696BFEB-1734-417d-8A04-86D01071C512}"

참고  Windows XP 또는 Windows Server 2003에 대한 재배포 가능 WinUSB 패키지를 사용하는 경우 제거 패키지에서 WinUSB를 제거하지 않아야 합니다. 기타 USB 장치에서 WinUSB를 사용하고 있을 수 있으므로 바이너리가 공유 폴더에 남아 있어야 합니다.

Winusb.sys를 설치하는 드라이버 패키지를 만드는 방법

WinUSB를 장치 기능 드라이버로 사용하려면 드라이버 패키지를 만듭니다. 드라이버 패키지에는 다음 파일이 포함되어야 합니다.

  • WinUSB 공동 설치 프로그램(Winusbcoinstaller.dll)
  • KMDF 공동 설치 프로그램(WdfcoinstallerXXX.dll)
  • Winusb.sys를 장치 기능 드라이버로 설치하는 .inf 파일. 자세한 내용은 WinUSB 설치를 위한 .Inf 파일 작성을 참조하세요.
  • 패키지에 대한 서명된 카탈로그 파일. Windows Vista x64 버전에 WinUSB를 설치하려면 이 파일이 필요합니다.
winusb 설치 패키지

참고  드라이버 패키지 콘텐츠가 다음 요구 사항을 충족하는지 확인합니다.

  • KMDF 및 WinUSB 공동 설치 프로그램 파일은 동일한 WDK(Windows 드라이버 키트) 버전에서 가져와야 합니다.
  • 드라이버가 모든 최신 Windows 릴리스를 지원하도록 공동 설치 프로그램 파일을 최신 WDK 버전에서 가져와야 합니다.
  • 드라이버 패키지의 콘텐츠는 Winqual 릴리스 서명을 통해 디지털 방식으로 서명되어야 합니다. 서명된 카탈로그 파일을 만들고 테스트하는 방법에 대한 자세한 내용은 Windows 개발자 센터 - 하드웨어 사이트에서 커널 모드 코드 서명 연습을 참조하세요.
  1. Windows 드라이버 키트를 설치합니다.
  2. USB 장치가 연결된 컴퓨터에서 드라이버 패키지 폴더를 만듭니다. 예를 들면 c:\UsbDevice입니다.
  3. WinUSB 공동 설치 프로그램(WinusbcoinstallerX.dll)을 WinDDK\BuildNumber\redist\winusb 폴더에서 드라이버 패키지 폴더로 복사합니다.

    필요한 경우 WinUSB 공동 설치 프로그램(Winusbcoinstaller.dll)이 WinUSB를 대상 시스템에 설치합니다. WDK에는 시스템 아키텍처가 x86 기반, x64 기반 및 Itanium 기반 시스템인지에 따라 세 가지 공동 설치 프로그램 버전이 포함됩니다. 세 가지 버전은 모두 이름이 WinusbcoinstallerX.dll이며 WinDDK\BuildNumber\redist\winusb 폴더의 해당 하위 디렉터리에 있습니다.

  4. KMDF 공동 설치 프로그램(WdfcoinstallerXXX.dll)을 WinDDK\BuildNumber\redist\wdf 폴더에서 드라이버 패키지 폴더로 복사합니다.

    필요한 경우 KMDF 공동 설치 프로그램(WdfcoinstallerXXX.dll)이 올바른 KMDF 버전을 대상 시스템에 설치합니다. Winusb.sys와 같은 KMDF 기반 클라이언트 드라이버를 사용하려면 해당 KMDF 프레임워크 버전을 시스템에 제대로 설치해야 하므로 WinUSB 공동 설치 프로그램 버전이 KMDF 공동 설치 프로그램과 일치해야 합니다. 예를 들어 Winusbcoinstaller2.dll에는 Wdfcoinstaller01009.dll을 통해 설치되는 KMDF 버전 1.9가 필요합니다. WdfcoinstallerXXX.dll의 x86 및 x64 버전이 WinDDK\BuildNumber\redist\wdf 폴더 아래에 WDK와 함께 포함되어 있습니다. 다음 표에서는 대상 시스템에서 사용할 WinUSB 공동 설치 프로그램 및 연결된 KMDF 공동 설치 프로그램을 보여 줍니다.

    이 표를 사용하여 WinUSB 공동 설치 프로그램 및 연결된 KMDF 공동 설치 프로그램을 확인합니다.

    WinUSB 공동 설치 프로그램KMDF 라이브러리 버전KMDF 공동 설치 프로그램
    Winusbcoinstaller.dll Requires KMDF 버전 1.5 이상

    Wdfcoinstaller01005.dll

    Wdfcoinstaller01007.dll

    Wdfcoinstaller01009.dll

    Winusbcoinstaller2.dll Requires KMDF 버전 1.9 이상Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dllRequires KMDF 버전 1.11 이상WdfCoInstaller01011.dll

     

  5. Winusb.sys를 USB 장치의 기능 드라이버로 설치하는 .inf 파일을 작성합니다.
  6. 패키지에 대한 서명된 카탈로그 파일을 만듭니다. Windows x64 버전에 WinUSB를 설치하려면 이 파일이 필요합니다.
  7. USB 장치를 컴퓨터에 연결합니다.
  8. 장치 관리자를 열어 드라이버를 설치합니다. 드라이버 소프트웨어 업데이트 마법사의 지침에 따라 수동 설치를 선택합니다. 설치를 완료하려면 드라이버 패키지 폴더의 위치를 제공해야 합니다.

관련 항목

WinUSB 아키텍처 및 모듈
USB 클라이언트 드라이버 개발을 위한 드라이버 모델 선택
WinUSB 함수를 사용하여 USB 장치에 액세스하는 방법
WinUSB 전원 관리
파이프 정책 수정을 위한 WinUSB 함수
WinUSB 함수
WinUSB

 

 

표시:
© 2014 Microsoft