다음을 통해 공유


개발자를 위한 WinUSB(Winusb.sys) 설치

단일 애플리케이션에서만 액세스하는 디바이스와 같은 특정 USB(유니버설 직렬 버스) 디바이스의 경우 드라이버를 구현하는 대신 디바이스의 커널 모드 스택에 WinUSB(Winusb.sys)를 USB 디바이스의 함수 드라이버로 설치할 수 있습니다.

Important

이 항목은 프로그래머를 위한 것입니다. USB 문제가 발생한 고객인 경우 일반적인 USB 문제 해결을 참조 하세요.

INF 파일 없이 WinUSB 자동 설치

OEM 또는 IHV(독립 하드웨어 공급업체)는 Windows 8 이상 버전의 운영 체제에 Winusb.sys 자동으로 설치되도록 디바이스를 빌드할 수 있습니다. 이러한 디바이스를 WinUSB 디바이스라고 하며, 기본 제공 Winusb.inf를 참조하는 사용자 지정 INF 파일을 작성할 필요가 없습니다.

WinUSB 디바이스를 연결하면 시스템에서 디바이스 정보를 읽고 Winusb.sys 자동으로 로드합니다.

자세한 내용은 WinUSB 디바이스를 참조 하세요.

시스템 제공 디바이스 클래스를 지정하여 WinUSB 설치

디바이스를 연결할 때 Windows가 자동으로 Winusb.sys 로드하는 것을 알 수 있습니다(IHV가 디바이스를 WinUSB 디바이스로 정의한 경우). 그렇지 않으면 다음 지침에 따라 드라이버를 로드합니다.

  1. 디바이스를 호스트 시스템에 연결합니다.
  2. 장치 관리자 열고 디바이스를 찾습니다.
  3. 디바이스를 선택하고 길게(또는 마우스 오른쪽 단추로 클릭) 상황에 맞는 메뉴에서 드라이버 소프트웨어 업데이트...를 선택합니다.
  4. 마법사에서 내 컴퓨터에서 드라이버 소프트웨어 찾아보기를 선택합니다.
  5. 내 컴퓨터의 디바이스 드라이버 목록에서 선택하도록 선택합니다.
  6. 디바이스 클래스 목록에서 유니버설 직렬 버스 디바이스를 선택합니다.
  7. 마법사에 WinUsb 디바이스표시됩니다. 드라이버를 로드하려면 선택합니다.

유니버설 직렬 버스 디바이스가 디바이스 클래스 목록에 표시되지 않는 경우 사용자 지정 INF를 사용하여 드라이버를 설치해야 합니다. 이전 절차에서는 디바이스에 액세스하기 위해 앱(UWP 앱 또는 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 설치 작성

드라이버 패키지의 일부로 usb 디바이스의 함수 드라이버로 Winusb.sys 설치하는 .inf 파일을 제공합니다.

다음 예제 .inf 파일은 섹션 이름의 USB_Install 적절한 DDInstall 값으로 변경하는 등 일부 수정 사항이 있는 대부분의 USB 디바이스에 대한 WinUSB 설치를 보여 줍니다. 필요에 따라 버전, 제조업체 및 모델 섹션도 변경해야 합니다. 예를 들어 적절한 제조업체의 이름, 서명된 카탈로그 파일의 이름, 올바른 디바이스 클래스 및 디바이스에 대한 공급업체 식별자(VID) 및 PID(제품 식별자)를 제공합니다. 카탈로그 파일을 만드는 방법에 대한 자세한 내용은 드라이버 패키지 테스트 서명을 위한 카탈로그 파일 만들기를 참조 하세요.

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

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

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

Windows 10 버전 1709부터 Windows 드라이버 키트는 드라이버 INF 파일을 테스트하여 구문 문제가 없고 INF 파일이 범용인지 확인하는 데 사용할 수 있는 InfVerif.exe 제공합니다. 유니버설 INF를 제공하는 것이 좋습니다. 자세한 내용은 유니버설 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
PnpLockdown = 1

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

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

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

; ========== Class definition (for Windows 8 and earlier versions)===========

[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

[USB_Install.Wdf]
KmdfService=WINUSB, WinUsb_Install

[WinUsb_Install]
KmdfLibraryVersion=1.11

[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

새 사용자 지정 디바이스 설정 클래스를 설치하기 위해 디바이스 INF 파일에 ClassInstall32 섹션만 포함합니다. 시스템 제공 디바이스 설정 클래스 또는 사용자 지정 클래스에 관계없이 설치된 클래스의 디바이스에 대한 INF 파일은 ClassInstall32 섹션을 포함하면 안됩니다.

다음 목록에 설명된 디바이스별 값 및 몇 가지 문제를 제외하고 이러한 섹션 및 지시문을 사용하여 모든 USB 디바이스에 WinUSB를 설치할 수 있습니다. 이러한 목록 항목은 이전 .inf 파일의 포함지시문을 설명합니다.

  • USB_Install: WinUSB를 설치하려면 USB_Install 섹션의 IncludeNeeds 지시문이 필요합니다. 이러한 지시문은 수정해서는 안 됩니다.

  • USB_Install.Services: USB_Install.Services 섹션의 Include 지시문에는 WinUSB(Winusb.inf)용 시스템 제공 .inf 포함됩니다. 이 .inf 파일은 대상 시스템에 아직 없는 경우 WinUSB 공동 설치 관리자에 의해 설치됩니다. Needs 지시문은 디바이스의 함수 드라이버로 Winusb.sys 설치하는 데 필요한 정보를 포함하는 Winusb.inf의 섹션을 지정합니다. 이러한 지시문은 수정해서는 안 됩니다.

  • 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는 X64 기반 시스템에 OSR USB FX2 보드의 함수 드라이버로 WinUSB를 설치합니다. 이 예제에서는 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
PnpLockdown = 1

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

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

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

; ========== Class definition (for Windows 8 and earlier versions) ===========

[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"
DiskName="MyDisk"
REG_MULTI_SZ = 0x00010000
  • USB_Install.CoInstallers: 참조된 AddRegCopyFiles 섹션을 포함하는 이 섹션에는 WinUSB 및 KMDF 공동 설치 관리자를 설치하고 디바이스와 연결하는 데이터 및 지침이 포함되어 있습니다. 대부분의 USB 디바이스는 수정 없이 이러한 섹션 및 지시문을 사용할 수 있습니다.

  • x86 기반 및 x64 기반 버전의 Windows에는 별도의 공동 설치 관리자가 있습니다.

    각 공동 설치 관리자에는 무료 및 검사 버전이 있습니다. 무료 버전을 사용하여 모든 소매 버전을 포함하여 Windows의 무료 빌드에 WinUSB를 설치합니다. 검사 버전("_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 작성을 참조하세요.
  • 패키지에 대한 서명된 카탈로그 파일입니다. 이 파일은 Vista부터 x64 버전의 Windows에 WinUSB를 설치하는 데 필요합니다.

WinUSB 설치 패키지.

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

  1. WDK(Windows 드라이버 키트) 를 다운로드하여 설치합니다.

  2. USB 디바이스가 연결된 컴퓨터에 드라이버 패키지 폴더를 만듭니다. 예를 들어 c:\UsbDevice입니다.

  3. WinDDK\BuildNumber\redist\<winusb 폴더의 WinUSB 공동 설치 관리자(WinusbcoinstallerX.dll)를 드라이버 패키지 폴더로 복사합니다.>

    WinUSB 공동 설치 관리자(Winusbcoinstaller.dll)는 필요한 경우 대상 시스템에 WinUSB를 설치합니다. WDK에는 시스템 아키텍처에 따라 x86 기반, x64 기반 시스템 및 Itanium 기반 시스템의 세 가지 버전의 공동 설치 관리자가 포함되어 있습니다. 모두 WinusbcoinstallerX.dll 이름이 지정되며 WinDDK\BuildNumber>\<redist\winusb 폴더의 적절한 하위 디렉터리에 있습니다.

  4. WinDDK\BuildNumber\redist\<wdf 폴더의 KMDF 공동 설치 관리자(WdfcoinstallerXXX.dll)를 드라이버 패키지 폴더로 복사합니다.>

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

    이 표를 사용하여 WinUSB 공동 설치 관리자 및 연결된 KMDF 공동 설치 관리자를 확인합니다.

    WinUSB 공동 설치 관리자 KMDF 라이브러리 버전 KMDF 공동 설치 관리자
    Winusbcoinstaller.dll KMDF 버전 1.5 이상이 필요합니다. Wdfcoinstaller01005.dll
    Wdfcoinstaller01007.dll
    Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll KMDF 버전 1.9 이상이 필요합니다. Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll KMDF 버전 1.11 이상이 필요합니다. WdfCoInstaller01011.dll
  5. Winusb.sys USB 디바이스의 함수 드라이버로 설치하는 .inf 파일을 작성합니다.

  6. 패키지에 대한 서명된 카탈로그 파일을 만듭니다. 이 파일은 x64 버전의 Windows에 WinUSB를 설치하는 데 필요합니다.

  7. USB 디바이스를 컴퓨터에 연결합니다.

  8. 장치 관리자 열어 드라이버를 설치합니다. 드라이버 소프트웨어 업데이트 마법사의 지침에 따라 수동 설치를 선택합니다. 설치를 완료하려면 드라이버 패키지 폴더의 위치를 제공해야 합니다.