개발자를 위한 WinUSB(Winusb.sys) 설치
특정 USB(유니버설 직렬 버스) 디바이스의 경우 드라이버를 구현하는 대신 WinUSB(Winusb.sys)를 설치할 수 있습니다.
Important
이 항목은 프로그래머를 위한 것입니다. USB 문제가 발생한 고객인 경우 Windows에서 USB-C 문제 해결을 참조 하세요.
INF 파일 없이 WinUSB 자동 설치
OEM 또는 IHV(독립 하드웨어 공급업체)는 Windows 8 이상 버전의 운영 체제에 Winusb.sys 자동으로 설치되도록 디바이스를 빌드할 수 있습니다. 이러한 디바이스를 WinUSB 디바이스라고 하며, 기본 제공 Winusb.inf를 참조하는 사용자 지정 INF 파일을 작성할 필요가 없습니다.
WinUSB 디바이스를 연결하면 시스템에서 디바이스 정보를 읽고 Winusb.sys 자동으로 로드합니다.
자세한 내용은 WinUSB 디바이스를 참조 하세요.
시스템 제공 디바이스 클래스를 지정하여 WinUSB 설치
디바이스를 연결할 때 Windows가 자동으로 Winusb.sys 로드하는 것을 알 수 있습니다. 그렇지 않으면 다음 지침에 따라 드라이버를 로드합니다.
- 디바이스를 호스트 시스템에 연결합니다.
- 장치 관리자를 열고 디바이스를 찾습니다.
- 디바이스를 선택하고 길게(또는 마우스 오른쪽 단추로 클릭) 상황에 맞는 메뉴에서 드라이버 소프트웨어 업데이트...를 선택합니다.
- 마법사에서 내 컴퓨터에서 드라이버 소프트웨어 찾아보기를 선택합니다.
- 내 컴퓨터의 디바이스 드라이버 목록에서 선택하도록 선택합니다.
- 디바이스 클래스 목록에서 유니버설 직렬 버스 디바이스를 선택합니다.
- 마법사에 WinUsb 디바이스가 표시됩니다. 드라이버를 로드하려면 선택합니다.
유니버설 직렬 버스 디바이스가 디바이스 클래스 목록에 표시되지 않는 경우 사용자 지정 INF를 사용하여 드라이버를 설치해야 합니다. 이전 절차에서는 디바이스에 액세스하기 위해 앱(UWP 앱 또는 Windows 데스크톱 앱)에 대한 디바이스 인터페이스 GUID를 추가하지 않습니다. 이 절차에 따라 수동으로 GUID를 추가해야 합니다.
이전 절차에서 설명한 대로 드라이버를 로드합니다.
guidgen.exe 같은 도구를 사용하여 디바이스에 대한 디바이스 인터페이스 GUID를 생성합니다.
다음 키에서 디바이스의 레지스트리 키를 찾습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<VID_vvvv&PID_pppp>
디바이스 매개 변수 키 아래에 DeviceInterfaceGUID라는 문자열 레지스트리 항목 또는 DeviceInterfaceGUIDs라는 다중 문자열 항목을 추가합니다. 2단계에서 생성한 GUID로 값을 설정합니다.
시스템에서 디바이스의 연결을 끊고 동일한 물리적 포트에 다시 연결합니다.
참고 항목
실제 포트를 변경하는 경우 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 섹션의 Include 및 Needs 지시문이 필요합니다. 이러한 지시문은 수정해서는 안 됩니다.
USB_Install.Services: USB_Install.Services 섹션의 Include 지시문에는 WinUSB(Winusb.inf)용 시스템 제공 .inf가 포함됩니다. WinUSB 코인스탈러는 대상 시스템에 아직 없는 경우 이 .inf 파일을 설치합니다. 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 coinstallers가 있는 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: 참조된 AddReg 및 CopyFiles 섹션이 포함된 이 섹션에는 WinUSB 및 KMDF 코인스톨러를 설치하고 디바이스와 연결하기 위한 데이터 및 지침이 포함되어 있습니다. 대부분의 USB 디바이스는 수정 없이 이러한 섹션 및 지시문을 사용할 수 있습니다.
x86 기반 및 x64 기반 버전의 Windows에는 별도의 coinstaller가 있습니다.
각 동전 설치에는 무료 및 확인 버전이 있습니다. 무료 버전을 사용하여 모든 소매 버전을 포함하여 Windows의 무료 빌드에 WinUSB를 설치합니다. Windows의 확인된 빌드에 WinUSB를 설치하려면 선택한 버전("_chk" 접미사 포함)을 사용합니다.
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를 설치하는 데 필요합니다.
드라이버 패키지 콘텐츠가 다음 요구 사항을 충족하는지 확인합니다.
- KMDF 및 WinUSB 동전 설치 파일은 동일한 버전의 WDK(Windows 드라이버 키트)에서 가져와야 합니다.
- 드라이버가 모든 최신 Windows 릴리스를 지원하려면 최신 버전의 WDK에서 코인스탈러 파일을 가져와야 합니다.
- 드라이버 패키지의 콘텐츠는 Winqual 릴리스 서명으로 디지털 서명되어야 합니다. 서명된 카탈로그 파일을 만들고 테스트하는 방법에 대한 자세한 내용은 Windows 개발자 센터 - 하드웨어 사이트에서 커널 모드 코드 서명 연습을 참조하세요.
WDK(Windows 드라이버 키트) 를 다운로드하여 설치합니다.
USB 디바이스가 연결된 컴퓨터에 드라이버 패키지 폴더를 만듭니다. 예를 들어 c:\UsbDevice입니다.
WinDDK\BuildNumber\redist\<winusb 폴더에서 드라이버 패키지 폴더로 WinUSB 코인스탈러(WinusbcoinstallerX.dll)를 복사합니다.>
WinUSB 코인스탈러(Winusbcoinstaller.dll)는 필요한 경우 대상 시스템에 WinUSB를 설치합니다. WDK에는 시스템 아키텍처에 따라 x86 기반, x64 기반 시스템 및 Itanium 기반 시스템의 세 가지 버전의 코인스탈러가 포함되어 있습니다. 각 코인스탈러는 WinusbcoinstallerX.dll 이름이 지정되며 WinDDK\BuildNumber>\<redist\winusb 폴더의 적절한 하위 디렉터리에 있습니다.
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.dllWinusbcoinstaller2.dll KMDF 버전 1.9 이상이 필요합니다. Wdfcoinstaller01009.dll Winusbcoinstaller2.dll KMDF 버전 1.11 이상이 필요합니다. WdfCoInstaller01011.dll Winusb.sys USB 디바이스의 함수 드라이버로 설치하는 .inf 파일을 작성합니다.
패키지에 대한 서명된 카탈로그 파일을 만듭니다. 이 파일은 x64 버전의 Windows에 WinUSB를 설치하는 데 필요합니다.
USB 디바이스를 컴퓨터에 연결합니다.
드라이버를 설치하려면 장치 관리자 엽니다. 드라이버 소프트웨어 업데이트 마법사의 지침에 따라 수동 설치를 선택합니다. 설치를 완료하려면 드라이버 패키지 폴더의 위치를 제공합니다.