Bagikan melalui


Perangkat WinUSB

Dalam artikel ini, Anda akan mempelajari tentang bagaimana perangkat WinUSB dikenali oleh Windows.

Informasi dalam artikel ini berlaku untuk Anda jika Anda adalah OEM atau vendor perangkat keras independen (IHV) yang mengembangkan perangkat yang ingin Anda gunakan Winusb.sys sebagai driver fungsi dan ingin memuat driver secara otomatis tanpa harus menyediakan INF kustom.

Apa itu perangkat WinUSB

Perangkat WinUSB adalah perangkat Universal Serial Bus (USB) yang firmware-nya mendefinisikan deskriptor fitur sistem operasi (OS) Microsoft tertentu yang melaporkan ID yang kompatibel sebagai "WINUSB".

Tujuan perangkat WinUSB adalah untuk memungkinkan Windows memuat Winusb.sys sebagai driver fungsi perangkat tanpa file INF kustom. Untuk perangkat WinUSB, Anda tidak diharuskan mendistribusikan file INF untuk perangkat Anda, membuat proses penginstalan driver menjadi sederhana bagi pengguna akhir. Sebaliknya, jika Anda perlu menyediakan INF kustom, Anda tidak boleh menentukan perangkat Anda sebagai perangkat WinUSB dan menentukan ID perangkat keras perangkat di INF.

Microsoft menyediakan Winusb.inf yang berisi informasi yang diperlukan oleh untuk menginstal Winusb.sys sebagai driver perangkat untuk perangkat USB.

Sebelum Windows 8, untuk memuat Winusb.sys sebagai driver fungsi, Anda perlu menyediakan INF kustom. INF kustom menentukan ID perangkat keras khusus perangkat dan juga menyertakan bagian dari Winusb.inf dalam kotak. Bagian-bagian tersebut diperlukan untuk membuat instans layanan, menyalin biner kotak masuk, dan mendaftarkan GUID antarmuka perangkat yang diperlukan aplikasi untuk menemukan perangkat dan berbicara dengannya. Untuk informasi tentang menulis INF kustom, lihat Penginstalan WinUSB (Winusb.sys).

Dalam Windows 8, file Winusb.inf dalam kotak telah diperbarui untuk memungkinkan Windows mencocokkan INF secara otomatis dengan perangkat WinUSB.

Penginstalan perangkat WinUSB dengan menggunakan Winusb.inf dalam kotak

Dalam Windows 8, file Winusb.inf dalam kotak telah diperbarui. INF menyertakan bagian penginstalan yang mereferensikan ID yang kompatibel yang disebut "USB\MS_COMP_WINUSB".

[Generic.Section.NTamd64]
%USB\MS_COMP_WINUSB.DeviceDesc%=WINUSB,USB\MS_COMP_WINUSB

INF yang diperbarui juga mencakup kelas penyiapan baru yang disebut "USBDevice".

Kelas penyiapan "USBDevice" tersedia untuk perangkat yang microsoftnya tidak menyediakan driver dalam kotak. Biasanya, perangkat tersebut bukan milik kelas USB yang terdefinisi dengan baik seperti Audio, Bluetooth, dan sebagainya, dan memerlukan driver kustom. Jika perangkat Anda adalah perangkat WinUSB, kemungkinan besar, perangkat tersebut bukan milik kelas USB. Oleh karena itu, perangkat Anda harus diinstal di bawah kelas penyiapan "USBDevice". Winusb.inf yang diperbarui memfasilitasi persyaratan tersebut.

Tentang menggunakan kelas USBDevice

Jangan gunakan kelas penyiapan "USB" untuk perangkat yang tidak diklasifikasikan. Kelas tersebut dicadangkan untuk menginstal pengontrol, hub, dan perangkat komposit. Menyalahgunakan kelas "USB" dapat menyebabkan masalah keandalan dan performa yang signifikan. Untuk perangkat yang tidak diklasifikasikan, gunakan "USBDevice".

Di Windows 8, untuk menggunakan kelas perangkat "USBDevice", cukup tambahkan ini ke INF Anda:

  [Version]
  ...
  Class=USBDevice
  ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}
  ...

Di Manajer Perangkat, Anda akan melihat perangkat USB Universal Serial Bus simpul baru dan perangkat Anda muncul di bawah simpul tersebut.

Di Windows 7, selain baris sebelumnya, Anda perlu membuat pengaturan registri ini di INF:

  ;---------- Add Registry Section ----------
  [USBDeviceClassReg]
  HKR,,,,"Universal Serial Bus devices"
  HKR,,NoInstallClass,,1
  HKR,,SilentInstall,,1
  HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"

Di Manajer Perangkat, Anda akan melihat perangkat Anda muncul di bawah perangkat USB Universal Serial Bus. Namun, deskripsi kelas perangkat berasal dari pengaturan registri yang ditentukan dalam INF Anda.

Perhatikan bahwa kelas "USBDevice" tidak terbatas pada WinUSB. Jika Anda memiliki driver kustom untuk perangkat Anda, Anda dapat menggunakan kelas penyiapan "USBDevice" di INF kustom.

Selama enumerasi perangkat, tumpukan driver USB membaca ID yang kompatibel dari perangkat. Jika ID yang kompatibel adalah "WINUSB", Windows menggunakannya sebagai pengidentifikasi perangkat dan menemukan kecocokan di Winusb.inf dalam kotak yang diperbarui, lalu memuat Winusb.sys sebagai driver fungsi perangkat.

Gambar ini untuk satu perangkat MUTT antarmuka yang didefinisikan sebagai perangkat WinUSB dan sebagai hasilnya Winusb.sys dimuat sebagai driver fungsi untuk perangkat.

Cuplikan layar Pengelola Perangkat Windows memperlihatkan perangkat WinUSB.

Untuk versi Windows yang lebih lama dari Windows 8, Winusb.inf yang diperbarui tersedia melalui Windows Update. Jika komputer Anda dikonfigurasi untuk mendapatkan pembaruan driver secara otomatis, driver WinUSB akan diinstal tanpa intervensi pengguna dengan menggunakan paket INF baru.

Cara mengubah deskripsi perangkat untuk perangkat WinUSB

Untuk perangkat WinUSB, Manajer Perangkat menampilkan "Perangkat WinUsb" sebagai deskripsi perangkat. String tersebut berasal dari Winusb.inf. Jika ada beberapa perangkat WinUSB, semua perangkat mendapatkan deskripsi perangkat yang sama.

Untuk mengidentifikasi dan membedakan perangkat secara unik di Manajer Perangkat, Windows 8 menyediakan properti baru pada kelas perangkat yang menginstruksikan sistem untuk memberikan prioritas pada deskripsi perangkat yang dilaporkan oleh perangkat (dalam deskriptor string iProduct-nya) atas deskripsi di INF. Kelas "USBDevice" yang ditentukan dalam Windows 8 mengatur properti ini. Dengan kata lain, ketika perangkat diinstal di bawah kelas "USBDevice", sistem meminta perangkat untuk deskripsi perangkat dan mengatur string Manajer Perangkat ke apa pun yang diambil dalam kueri. Dalam hal ini, deskripsi perangkat yang disediakan dalam INF diabaikan. Perhatikan string deskripsi perangkat: "MUTT" pada gambar sebelumnya. String disediakan oleh perangkat USB dalam deskriptor string produknya.

Properti kelas baru tidak didukung pada versi Windows yang lebih lama. Untuk memiliki deskripsi perangkat yang disesuaikan pada versi Windows yang lebih lama, Anda harus menulis INF kustom Anda sendiri.

Cara mengonfigurasi perangkat WinUSB

Untuk mengidentifikasi perangkat USB sebagai perangkat WinUSB, firmware perangkat harus memiliki Deskriptor OS Microsoft. Untuk informasi tentang deskriptor, lihat spesifikasi yang dijelaskan di sini: Deskriptor OS Microsoft.

Mendukung deskriptor fitur yang diperluas

Agar tumpukan driver USB mengetahui bahwa perangkat mendukung deskriptor fitur yang diperluas, perangkat harus menentukan deskriptor string OS yang disimpan pada indeks string 0xEE. Selama enumerasi, kueri tumpukan driver untuk deskriptor string. Jika deskriptor ada, tumpukan driver mengasumsikan bahwa perangkat berisi satu atau beberapa deskriptor fitur OS dan data yang diperlukan untuk mengambil deskriptor fitur tersebut.

Deskriptor string yang diambil memiliki nilai bidang bMS_VendorCode . Nilai menunjukkan kode vendor yang harus digunakan tumpukan driver USB untuk mengambil deskriptor fitur yang diperluas.

Untuk informasi tentang cara menentukan deskriptor string OS, lihat "Deskriptor String OS" dalam spesifikasi yang dijelaskan di sini: Deskriptor OS Microsoft.

Mengatur ID yang kompatibel

Deskriptor fitur OS ID kompatibel yang diperluas yang diperlukan untuk mencocokkan Winusb.inf dalam kotak dan memuat modul driver WinUSB.

Deskriptor fitur OS ID yang kompatibel yang diperluas menyertakan bagian header diikuti oleh satu atau beberapa bagian fungsi tergantung pada apakah perangkat adalah perangkat komposit atau non-komposit. Bagian header menentukan panjang seluruh deskriptor, jumlah bagian fungsi, dan nomor versi. Untuk perangkat non-komposit, header diikuti oleh satu bagian fungsi yang terkait dengan satu-satunya antarmuka perangkat. Bidang compatibleID dari bagian tersebut harus menentukan "WINUSB" sebagai nilai bidang. Untuk perangkat komposit, ada beberapa bagian fungsi. Bidang COMPATIBLEID dari setiap bagian fungsi harus menentukan "WINUSB".

Mendaftarkan GUID antarmuka perangkat

Pendeskripsi fitur OS properti yang diperluas yang diperlukan untuk mendaftarkan GUID antarmuka perangkatnya. GUID diperlukan untuk menemukan perangkat dari aplikasi atau layanan, mengonfigurasi perangkat, dan melakukan operasi I/O.

Di versi Windows sebelumnya, pendaftaran GUID antarmuka perangkat dilakukan melalui INF kustom. Mulai dari Windows 8, perangkat Anda harus melaporkan GUID antarmuka dengan menggunakan deskriptor fitur OS properti yang diperluas.

Deskriptor fitur OS properti yang diperluas menyertakan bagian header yang diikuti oleh satu atau beberapa bagian properti kustom. Bagian header menjelaskan seluruh deskriptor properti yang diperluas, termasuk panjang totalnya, nomor versi, dan jumlah bagian properti kustom. Untuk mendaftarkan GUID antarmuka perangkat, tambahkan bagian properti kustom yang mengatur bidang bPropertyName ke "DeviceInterfaceGUID" dan wPropertyNameLength ke 40 byte. Buat GUID antarmuka perangkat unik dengan menggunakan generator GUID dan atur bidang bPropertyData ke GUID tersebut, seperti "{8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}". GUID ditentukan sebagai string Unicode dan panjang string adalah 78 byte (termasuk terminator null).

       
bPropertyData 78 byte 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 Nilai properti adalah {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}.

Selama enumerasi perangkat, tumpukan driver USB kemudian mengambil nilai DeviceInterfaceGUID dari deskriptor fitur OS properti yang diperluas dan mendaftarkan perangkat di kunci perangkat keras perangkat. Aplikasi dapat mengambil nilai dengan menggunakan SETUPDiXxx API (Lihat SetupDiOpenDevRegKey). Untuk informasi selengkapnya, lihat Cara Mengakses Perangkat USB dengan Menggunakan Fungsi WinUSB.

Mengaktifkan atau menonaktifkan fitur manajemen daya WinUSB

Sebelum Windows 8, untuk mengonfigurasi fitur manajemen daya WinUSB, Anda harus menulis nilai entri registri di HW. Bagian AddReg dari INF kustom Anda.

Di Windows 8 dan yang lebih baru, Anda dapat menentukan pengaturan daya di perangkat. Anda dapat melaporkan nilai melalui deskriptor fitur OS properti yang diperluas yang mengaktifkan atau menonaktifkan fitur di WinUSB untuk perangkat tersebut. Ada dua fitur yang dapat dikonfigurasi: penangguhan selektif dan sistem bangun. Penangguhan selektif memungkinkan perangkat memasuki status daya rendah saat diam. Bangun sistem mengacu pada kemampuan perangkat untuk membangunkan sistem ketika sistem dalam keadaan daya rendah.

Untuk informasi tentang fitur manajemen daya WinUSB, lihat WinUSB Power Management.

Nama properti Deskripsi
DeviceIdleEnabled Nilai ini diatur ke 1 untuk menunjukkan bahwa perangkat dapat mati saat diam (penangguhan selektif).
DefaultIdleState Nilai ini diatur ke 1 untuk menunjukkan bahwa perangkat dapat ditangguhkan saat diam secara default.
DefaultIdleTimeout Nilai ini diatur ke 5000 dalam milidetik untuk menunjukkan jumlah waktu dalam milidetik untuk menunggu sebelum menentukan bahwa perangkat menganggur.
UserSetDeviceIdleEnabled Nilai ini diatur ke 1 untuk memungkinkan pengguna mengontrol kemampuan perangkat untuk mengaktifkan atau menonaktifkan penangguhan selektif USB. Kotak centang Izinkan komputer mematikan perangkat ini untuk menghemat daya pada halaman properti Manajemen Daya perangkat dan pengguna dapat mencentang atau menghapus centang pada kotak untuk mengaktifkan atau menonaktifkan penangguhan selektif USB.
SystemWakeEnabled Nilai ini diatur ke 1 untuk memungkinkan pengguna mengontrol kemampuan perangkat untuk membangunkan sistem dari status daya rendah. Ketika diaktifkan, kotak centang Izinkan perangkat ini untuk membangunkan komputer muncul di halaman properti manajemen daya perangkat. Pengguna dapat mencentang atau menghapus centang pada kotak untuk mengaktifkan atau menonaktifkan sistem USB.

Misalnya, untuk mengaktifkan penangguhan selektif pada perangkat, tambahkan bagian properti kustom yang mengatur bidang bPropertyName ke string Unicode, "DeviceIdleEnabled" dan wPropertyNameLength ke 36 byte. Atur bidang bPropertyData ke "0x00000001". Nilai properti disimpan sebagai bilangan bulat 32-bit little-endian.

Selama enumerasi, tumpukan driver USB membaca deskriptor fitur properti yang diperluas dan membuat entri registri di bawah kunci ini:

\ HKEY_LOCAL_MACHINESistem\CurrentControlSet\Enum\USB\Parameter PerangkatPengidentifikasi>Instans Pengidentifikasi<\><Perangkat\

Gambar ini menunjukkan pengaturan sampel untuk perangkat WinUSB.

Cuplikan layar Editor Registri Windows memperlihatkan pengaturan untuk perangkat WinUSB.

Untuk contoh tambahan, lihat spesifikasi pada Microsoft OS Descriptors.