Penginstalan WinUSB (Winusb.sys) untuk pengembang

Untuk perangkat Universal Serial Bus (USB) tertentu, seperti perangkat yang hanya diakses oleh satu aplikasi, Anda dapat menginstal WinUSB (Winusb.sys) di tumpukan mode kernel perangkat sebagai driver fungsi perangkat USB alih-alih mengimplementasikan driver.

Penting

Topik ini untuk programmer. Jika Anda adalah pelanggan yang mengalami masalah USB, lihat Memecahkan masalah UMUM USB

Penginstalan otomatis WinUSB tanpa file INF

Sebagai OEM atau vendor perangkat keras independen (IHV), Anda dapat membangun perangkat Anda sehingga Winusb.sys diinstal secara otomatis pada versi sistem operasi Windows 8 dan yang lebih baru. Perangkat seperti itu disebut perangkat WinUSB dan tidak mengharuskan Anda menulis file INF kustom yang mereferensikan Winusb.inf dalam kotak.

Saat Anda menyambungkan perangkat WinUSB, sistem membaca informasi perangkat dan memuat Winusb.sys secara otomatis.

Untuk informasi selengkapnya, lihat Perangkat WinUSB.

Menginstal WinUSB dengan menentukan kelas perangkat yang disediakan sistem

Saat menyambungkan perangkat, Anda mungkin melihat bahwa Windows dimuat Winusb.sys secara otomatis (jika IHV telah mendefinisikan perangkat sebagai Perangkat WinUSB). Jika tidak, ikuti instruksi berikut untuk memuat driver:

  1. Colokkan perangkat Anda ke sistem host.
  2. Buka Manajer Perangkat dan temukan perangkat.
  3. Pilih dan tahan (atau klik kanan) perangkat dan pilih Perbarui perangkat lunak driver... dari menu konteks.
  4. Di wizard, pilih Telusuri komputer saya untuk mencari perangkat lunak driver.
  5. Pilih Izinkan saya memilih dari daftar driver perangkat di komputer saya.
  6. Dari daftar kelas perangkat, pilih perangkat Universal Serial Bus.
  7. Wizard menampilkan Perangkat WinUsb. Pilih untuk memuat driver.

Jika perangkat Universal Serial Bus tidak muncul dalam daftar kelas perangkat, maka Anda perlu menginstal driver dengan menggunakan INF kustom. Prosedur sebelumnya tidak menambahkan GUID antarmuka perangkat untuk aplikasi (aplikasi UWP atau aplikasi desktop Windows) untuk mengakses perangkat. Anda harus menambahkan GUID secara manual dengan mengikuti prosedur ini.

  1. Muat driver seperti yang dijelaskan dalam prosedur sebelumnya.

  2. Buat GUID antarmuka perangkat untuk perangkat Anda, dengan menggunakan alat seperti guidgen.exe.

  3. Temukan kunci registri untuk perangkat di bawah kunci ini:

    <VID_vvvv&PID_ppppHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\>

  4. Di bawah kunci Parameter Perangkat, tambahkan entri registri String bernama DeviceInterfaceGUID atau entri Multi-String bernama DeviceInterfaceGUIDs. Atur nilai ke GUID yang Anda buat di langkah 2.

  5. Putuskan sambungan perangkat dari sistem dan sambungkan kembali ke port fisik yang sama. Catatan: Jika Anda mengubah port fisik, Anda harus mengulangi langkah 1 hingga 4.

Menulis INF kustom untuk penginstalan WinUSB

Sebagai bagian dari paket driver, Anda menyediakan file .inf yang menginstal Winusb.sys sebagai driver fungsi untuk perangkat USB.

Contoh file .inf berikut menunjukkan penginstalan WinUSB untuk sebagian besar perangkat USB dengan beberapa modifikasi, seperti mengubah USB_Install dalam nama bagian ke nilai DDInstall yang sesuai. Anda juga harus mengubah bagian versi, produsen, dan model seperlunya. Misalnya, berikan nama manufaktur yang sesuai, nama file katalog anda yang ditandatangani, kelas perangkat yang benar, dan pengidentifikasi vendor (VID) dan pengidentifikasi produk (PID) untuk perangkat. Untuk informasi tentang membuat file katalog, lihat Membuat File Katalog untuk Test-Signing Paket Driver.

Perhatikan juga bahwa kelas penyiapan diatur ke "USBDevice". Vendor dapat menggunakan kelas penyiapan "USBDevice" untuk perangkat yang bukan milik kelas lain dan bukan pengontrol atau hub host USB.

Jika Anda menginstal WinUSB sebagai driver fungsi untuk salah satu fungsi di perangkat komposit USB, Anda harus memberikan ID perangkat keras yang terkait dengan fungsi, di INF. Anda dapat memperoleh ID perangkat keras untuk fungsi dari properti devnode di Device Manager. Format string ID perangkat keras adalah "USB\VID_vvvv&PID_pppp".

INF berikut menginstal WinUSB sebagai driver fungsi papan OSR USB FX2 pada sistem berbasis x64.

Mulai dari Windows 10, versi 1709, Windows Driver Kit menyediakan InfVerif.exe yang dapat Anda gunakan untuk menguji file INF driver untuk memastikan tidak ada masalah sintaks dan file INF bersifat universal. Kami menyarankan agar Anda menyediakan INF universal. Untuk informasi selengkapnya, lihat Menggunakan File INF Universal.

;
;
; 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

Hanya sertakan bagian ClassInstall32 dalam file INF perangkat untuk menginstal kelas penyiapan perangkat kustom baru. File INF untuk perangkat di kelas yang diinstal, baik kelas penyiapan perangkat yang disediakan sistem atau kelas kustom, tidak boleh menyertakan bagian ClassInstall32.

Kecuali untuk nilai khusus perangkat dan beberapa masalah yang dicatat dalam daftar berikut, Anda dapat menggunakan bagian dan arahan ini untuk menginstal WinUSB untuk perangkat USB apa pun. Item daftar ini menjelaskan Menyertakan dan Mengarahkan dalam file .inf sebelumnya.

  • USB_Install: Petunjuk Sertakan dan Kebutuhan di bagian USB_Install diperlukan untuk menginstal WinUSB. Anda tidak boleh memodifikasi arahan ini.

  • USB_Install.Services: Direktif Sertakan di bagian USB_Install.Services mencakup .inf yang disediakan sistem untuk WinUSB (Winusb.inf). File .inf ini diinstal oleh penginstal bersama WinUSB jika belum ada di sistem target. Direktif Kebutuhan menentukan bagian dalam Winusb.inf yang berisi informasi yang diperlukan untuk menginstal Winusb.sys sebagai driver fungsi perangkat. Anda tidak boleh memodifikasi arahan ini.

  • USB_Install.HW: Bagian ini adalah kunci dalam file .inf. Ini menentukan antarmuka perangkat pengidentifikasi unik global (GUID) untuk perangkat Anda. Direktif AddReg menetapkan GUID antarmuka yang ditentukan dalam nilai registri standar. Ketika Winusb.sys dimuat sebagai driver fungsi perangkat, ia membaca nilai registri kunci DeviceInterfaceGUIDs dan menggunakan GUID yang ditentukan untuk mewakili antarmuka perangkat. Anda harus mengganti GUID dalam contoh ini dengan GUID yang Anda buat khusus untuk perangkat Anda. Jika protokol untuk perangkat berubah, buat GUID antarmuka perangkat baru.

    Catatan Perangkat lunak mode pengguna harus memanggil SetupDiGetClassDevs untuk menghitung antarmuka perangkat terdaftar yang terkait dengan salah satu kelas antarmuka perangkat yang ditentukan di bawah kunci DeviceInterfaceGUIDs. SetupDiGetClassDevs mengembalikan handel perangkat untuk perangkat yang kemudian harus diteruskan perangkat lunak mode pengguna ke rutinitas WinUsb_Initialize untuk mendapatkan handel WinUSB untuk antarmuka perangkat. Untuk informasi selengkapnya tentang rutinitas ini, lihat Cara Mengakses Perangkat USB dengan Menggunakan Fungsi WinUSB.

INF berikut menginstal WinUSB sebagai driver fungsi papan OSR USB FX2 pada sistem berbasis x64. Contoh menunjukkan INF dengan penginstal bersama WDF.

;
;
; 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: Bagian ini, yang mencakup bagian AddReg dan CopyFiles yang direferensikan, berisi data dan instruksi untuk menginstal penginstal bersama WinUSB dan KMDF dan mengaitkannya dengan perangkat. Sebagian besar perangkat USB dapat menggunakan bagian dan arahan ini tanpa modifikasi.

  • Versi Windows berbasis x86 dan x64 memiliki penginstal bersama terpisah.

    Setiap penginstal bersama memiliki versi gratis dan diperiksa. Gunakan versi gratis untuk menginstal WinUSB pada build Windows gratis, termasuk semua versi ritel. Gunakan versi yang dicentang (dengan akhiran "_chk") untuk menginstal WinUSB pada build Windows yang diperiksa.

Setiap kali Winusb.sys dimuat, ia mendaftarkan antarmuka perangkat yang memiliki kelas antarmuka perangkat yang ditentukan dalam registri di bawah kunci DeviceInterfaceGUIDs .

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

Jika Anda menggunakan paket WinUSB yang dapat didistribusikan ulang untuk Windows XP atau Windows Server 2003, pastikan Anda tidak menghapus instalan WinUSB dalam paket penghapusan instalasi Anda. Perangkat USB lainnya mungkin menggunakan WinUSB, sehingga biner-binernya harus tetap berada di folder bersama.

Cara membuat paket driver yang menginstal Winusb.sys

Untuk menggunakan WinUSB sebagai driver fungsi perangkat, Anda membuat paket driver. Paket driver harus berisi file-file ini:

  • Penginstal bersama WinUSB (Winusbcoinstaller.dll)
  • Penginstal bersama KMDF (WdfcoinstallerXXX.dll)
  • File .inf yang menginstal Winusb.sys sebagai driver fungsi perangkat. Untuk informasi selengkapnya, lihat Menulis INF kustom untuk penginstalan WinUSB.
  • File katalog yang ditandatangani untuk paket tersebut. File ini diperlukan untuk menginstal WinUSB pada Windows versi x64 yang dimulai dengan Vista.

Paket penginstalan WinUSB.

Pastikan bahwa konten paket driver memenuhi persyaratan ini:

  • File penginstal bersama KMDF dan WinUSB harus diperoleh dari versi Windows Driver Kit (WDK) yang sama.
  • File penginstal bersama harus diperoleh dari WDK versi terbaru, sehingga driver mendukung semua rilis Windows terbaru.
  • Isi paket driver harus ditandatangani secara digital dengan tanda tangan rilis Winqual. Untuk informasi selengkapnya tentang cara membuat dan menguji file katalog yang ditandatangani, lihat Panduan Penandatanganan Kode Mode Kernel di Windows Dev Center - Situs perangkat keras.
  1. Unduh Windows Driver Kit (WDK) dan instal.

  2. Buat folder paket driver pada komputer yang tersambung dengan perangkat USB. Misalnya, c:\UsbDevice.

  3. Salin penginstal bersama WinUSB (WinusbcoinstallerX.dll) dari folder WinDDK\<BuildNumber>\redist\winusb ke folder paket driver.

    Penginstal bersama WinUSB (Winusbcoinstaller.dll) menginstal WinUSB pada sistem target, jika perlu. WDK mencakup tiga versi penginstal bersama tergantung pada arsitektur sistem: sistem berbasis x86, berbasis x64, dan berbasis Itanium. Semuanya diberi nama WinusbcoinstallerX.dll dan terletak di subdirektori yang sesuai di folder WinDDK\<BuildNumber>\redist\winusb .

  4. Salin co-installer KMDF (WdfcoinstallerXXX.dll) dari folder WinDDK\<BuildNumber>\redist\wdf ke folder paket driver.

    Penginstal bersama KMDF (WdfcoinstallerXXX.dll) menginstal versi KMDF yang benar pada sistem target, jika perlu. Versi penginstal bersama WinUSB harus cocok dengan penginstal bersama KMDF karena driver klien berbasis KMDF, seperti Winusb.sys, memerlukan versi kerangka kerja KMDF yang sesuai untuk diinstal dengan benar pada sistem. Misalnya, Winusbcoinstaller2.dll memerlukan KMDF versi 1.9, yang diinstal oleh Wdfcoinstaller01009.dll. Versi x86 dan x64 WdfcoinstallerXXX.dll disertakan dengan WDK di bawah folder WinDDK\<BuildNumber>\redist\wdf . Tabel berikut menunjukkan penginstal bersama WinUSB dan penginstal bersama KMDF terkait untuk digunakan pada sistem target.

    Gunakan tabel ini untuk menentukan penginstal bersama WinUSB dan penginstal bersama KMDF terkait.

    Penginstal bersama WinUSB Versi pustaka KMDF Penginstal bersama KMDF
    Winusbcoinstaller.dll Memerlukan KMDF versi 1.5 atau yang lebih baru Wdfcoinstaller01005.dll
    Wdfcoinstaller01007.dll
    Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Memerlukan KMDF versi 1.9 atau yang lebih baru Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Memerlukan KMDF versi 1.11 atau yang lebih baru WdfCoInstaller01011.dll
  5. Tulis file .inf yang menginstal Winusb.sys sebagai driver fungsi untuk perangkat USB.

  6. Buat file katalog yang ditandatangani untuk paket tersebut. File ini diperlukan untuk menginstal WinUSB pada versi x64 Windows.

  7. Pasang perangkat USB ke komputer Anda.

  8. Buka Manajer Perangkat untuk menginstal driver. Ikuti instruksi pada wizard Perbarui Perangkat Lunak Driver dan pilih penginstalan manual. Anda harus menyediakan lokasi folder paket driver untuk menyelesaikan penginstalan.