Driver sisi host USB di Windows

Artikel ini memberikan gambaran umum tentang arsitektur tumpukan driver Universal Serial Bus (USB).

Gambar berikut menunjukkan diagram blok arsitektur tumpukan driver USB untuk Windows. Diagram menunjukkan tumpukan driver USB terpisah untuk USB 2.0 dan USB 3.0. Windows memuat tumpukan driver USB 3.0 saat perangkat dilampirkan ke pengontrol xHCI.

Diagram blok arsitektur untuk tumpukan driver USB 2.0 dan 3.0.

Windows memuat tumpukan driver USB 2.0 untuk perangkat yang terpasang pada pengontrol eHCI, oHCI, atau uHCI. Tumpukan driver USB 2.0 dikirim di Windows XP dengan Paket Layanan 1 (SP1) dan versi sistem operasi Windows yang lebih baru.

Tumpukan driver USB 3.0

Microsoft membuat driver USB 3.0 dengan menggunakan antarmuka Kernel Mode Driver Framework (KMDF). Model driver KMDF mengurangi kompleksitas dan meningkatkan stabilitas.

Driver pengontrol host USB 3.0 (Usbxhci.sys)

Driver xHCI adalah driver pengontrol host USB 3.0. Tanggung jawab driver xHCI termasuk menginisialisasi register MMIO dan struktur data berbasis memori host untuk perangkat keras pengontrol xHCI, pemetaan permintaan transfer dari driver lapisan atas ke Transfer Blok Permintaan, dan mengirimkan permintaan ke perangkat keras. Setelah menyelesaikan transfer, driver menangani peristiwa penyelesaian transfer dari perangkat keras dan menyebarkan peristiwa ke atas tumpukan driver. Ini juga mengontrol slot perangkat pengontrol xHCI dan konteks titik akhir.

Windows memuat driver xHCI sebagai objek perangkat fungsi (FDO) di tumpukan perangkat untuk pengontrol host.

Ekstensi pengontrol host USB (Ucx01000.sys)

Driver ekstensi pengontrol host USB (ekstensi ke KMDF) adalah ekstensi baru untuk driver pengontrol host khusus kelas dasar, seperti driver xHCI. Driver baru dapat diperluas dan dirancang untuk mendukung jenis driver pengontrol host lainnya yang diharapkan dapat dikembangkan di masa depan. Ekstensi pengontrol host USB berfungsi sebagai antarmuka abstrak umum ke driver hub, menyediakan mekanisme generik untuk mengantre permintaan ke driver pengontrol host, dan mengambil alih fungsi tertentu yang dipilih. Semua permintaan I/O yang dimulai oleh driver atas mencapai driver ekstensi pengontrol host sebelum driver xHCI. Setelah menerima permintaan I/O, ekstensi pengontrol host memvalidasi permintaan dan kemudian meneruskan permintaan ke antrean KMDF yang tepat yang terkait dengan titik akhir target. Driver xHCI, ketika siap untuk diproses, mengambil permintaan dari antrean. Tanggung jawab driver ekstensi pengontrol host USB adalah:

  • Menyediakan objek khusus USB ke driver xHCI.
  • Menyediakan rutinitas panggilan balik peristiwa KMDF ke driver xHCI.
  • Mengelola dan mengontrol operasi hub akar yang terkait dengan pengontrol host.
  • Menerapkan fitur yang dapat dikonfigurasi oleh driver klien, seperti MDL berantai, aliran, dan sebagainya.

Driver hub USB (Usbhub3.sys)

Driver hub baru, di tumpukan driver USB untuk perangkat 3.0, menggunakan model driver KMDF. Driver hub terutama melakukan tugas-tugas ini:

  • Mengelola hub USB dan portnya.
  • Menghitung perangkat dan hub lain yang terpasang pada port hilirnya.
  • Membuat objek perangkat fisik (PDO) untuk perangkat dan hub yang dijumlahkan.

Windows memuat driver hub sebagai FDO di tumpukan perangkat hub. Enumerasi perangkat dan manajemen hub di driver baru diimplementasikan melalui serangkaian mesin status. Driver hub bergantung pada KMDF untuk manajemen daya dan fungsi PnP. Selain manajemen hub, driver hub juga melakukan pemeriksaan awal dan pemrosesan permintaan tertentu yang dikirim oleh lapisan driver klien USB. Misalnya, driver hub menguraikan permintaan konfigurasi pilih untuk menentukan titik akhir mana yang akan dikonfigurasi oleh permintaan. Setelah mengurai informasi, driver hub mengirimkan permintaan ke ekstensi pengontrol host USB atau pemrosesan lebih lanjut.

Tumpukan driver USB 2.0

Windows memuat tumpukan driver USB 2.0 untuk perangkat yang terpasang pada pengontrol eHCI, oHCI, atau uHCI. Driver di tumpukan driver USB 2.0 dikirim di Windows XP dengan SP1 dan versi yang lebih baru dari sistem operasi Windows. Tumpukan driver USB 2.0 dirancang untuk memfasilitasi perangkat USB berkecepatan tinggi seperti yang didefinisikan dalam spesifikasi USB 2.0.

Di bagian bawah tumpukan driver USB adalah driver pengontrol host. Ini terdiri dari driver port, Usbport.sys, dan satu atau lebih dari tiga driver miniport yang berjalan bersamaan. Ketika sistem mendeteksi perangkat keras pengontrol host, sistem memuat salah satu driver miniport ini. Driver miniport, setelah dimuat, memuat driver port, Usbport.sys. Driver port menangani aspek-aspek tugas driver pengontrol host yang independen dari protokol tertentu.

Driver miniport Usbuhci.sys (antarmuka pengontrol host universal) menggantikan driver miniclass Uhcd.sys yang dikirim dengan Windows 2000. Driver miniport Usbohci.sys (antarmuka pengontrol host terbuka) menggantikan Openhci.sys. Driver miniport Usbehci.sys mendukung perangkat USB berkecepatan tinggi dan diperkenalkan di Windows XP dengan SP1 dan yang lebih baru serta sistem operasi Windows Server 2003 dan yang lebih baru.

Di semua versi Windows yang mendukung USB 2.0, sistem operasi mampu mengelola pengontrol host USB 1.1 dan USB 2.0 secara bersamaan. Setiap kali sistem operasi mendeteksi bahwa kedua jenis pengontrol ada, sistem ini membuat dua node perangkat terpisah, satu untuk setiap pengontrol host. Windows kemudian memuat driver miniport Usbehci.sys untuk perangkat keras pengontrol host yang mematuhi USB 2.0 dan Usbohci.sys atau Openhci.sys untuk perangkat keras yang mematuhi USB 1.1, tergantung pada konfigurasi sistem.

Di atas driver port adalah driver bus USB, Usbhub.sys, juga dikenal sebagai driver hub. Ini adalah driver perangkat untuk setiap hub pada sistem.

Driver induk generik kelas umum USB (Usbccgp.sys)

Driver induk generik kelas umum USB adalah driver induk yang disediakan Microsoft untuk perangkat komposit. Driver hub menghitung dan memuat driver komposit induk jika deviceClass adalah 0 atau 0xef dan numInterfaces lebih besar dari 1 dalam deskriptor perangkat. Driver hub menghasilkan ID yang kompatibel untuk driver komposit induk sebagai "USB\COMPOSITE". Usbccgp.sys menggunakan rutinitas Windows Driver Model (WDM).

Driver komposit induk menghitung semua fungsi dalam perangkat komposit dan membuat PDO untuk masing-masing fungsi. Ini menyebabkan kelas atau driver klien yang sesuai dimuat untuk setiap fungsi di perangkat. Setiap driver fungsi (PDO anak) mengirim permintaan ke driver induk, yang mengirimkannya ke driver hub USB.

Usbccgp.sys disertakan dengan Windows XP dengan SP1 dan versi yang lebih baru dari sistem operasi Windows. Dalam Windows 8, driver telah diperbarui untuk mengimplementasikan fitur penangguhan fungsi dan wake-up jarak jauh seperti yang didefinisikan dalam spesifikasi USB 3.0.

Untuk informasi selengkapnya, lihat Driver Induk Generik USB (Usbccgp.sys).

WinUSB (Winusb.sys)

Windows USB (WinUSB) adalah driver generik yang disediakan Microsoft untuk perangkat USB. Arsitektur WinUSB terdiri dari driver mode kernel (Winusb.sys) dan pustaka tautan dinamis mode pengguna (Winusb.dll). Untuk perangkat yang tidak memerlukan driver fungsi kustom, Winusb.sys dapat diinstal di tumpukan mode kernel perangkat sebagai driver fungsi. Proses mode pengguna kemudian dapat berkomunikasi dengan Winusb.sys dengan menggunakan sekumpulan permintaan kontrol I/O perangkat atau dengan memanggil fungsi WinUsb_Xxx . Untuk informasi selengkapnya, lihat WinUSB.

Dalam Windows 8, file informasi yang disediakan Microsoft (INF) untuk WinUSB, Winusb.inf, berisi USB\MS_COMP_WINUSB sebagai string pengidentifikasi perangkat. Ini memungkinkan Winusb.sys untuk dimuat secara otomatis sebagai driver fungsi untuk perangkat yang memiliki ID kompatibel WinUSB yang cocok di deskriptor MS OS. Perangkat tersebut disebut perangkat WinUSB. Produsen perangkat keras tidak diharuskan mendistribusikan file INF untuk perangkat WinUSB mereka, membuat proses penginstalan driver lebih sederhana untuk pengguna akhir. Untuk informasi selengkapnya, lihat Perangkat WinUSB.

Driver klien USB

Setiap perangkat USB, komposit, atau non-komposit, dikelola oleh driver klien. Driver klien USB adalah kelas atau driver perangkat yang merupakan klien dari tumpukan driver USB. Driver tersebut termasuk driver khusus kelas dan perangkat dari Microsoft atau vendor pihak ketiga. Untuk melihat daftar driver kelas yang disediakan oleh Microsoft, lihat Driver untuk Kelas Perangkat USB yang Didukung. Driver klien membuat permintaan untuk berkomunikasi dengan perangkat dengan memanggil antarmuka publik yang diekspos oleh tumpukan driver USB.

Driver klien untuk perangkat komposit tidak berbeda dari driver klien untuk perangkat non-komposit, kecuali untuk lokasinya di tumpukan driver.

Driver klien untuk perangkat non-komposit berlapis tepat di atas driver hub.

Untuk perangkat USB komposit yang mengekspos beberapa fungsi dan tidak memiliki driver kelas induk, Windows memuat driver induk generik USB (Usbccgp.sys) antara driver hub dan lapisan driver klien. Driver induk membuat PDO terpisah untuk setiap fungsi perangkat komposit. Driver klien (FDO untuk fungsi) dimuat di atas driver induk generik. Vendor dapat memilih untuk menyediakan driver klien terpisah untuk setiap fungsi.

Driver klien USB dapat berjalan dalam mode pengguna atau mode kernel, tergantung pada persyaratan driver. Driver klien USB dapat ditulis dengan menggunakan rutinitas KMDF, UMDF, atau WDM.

Pustaka pembantu untuk driver klien

Microsoft menyediakan pustaka pembantu berikut untuk membantu driver dan aplikasi mode kernel berkomunikasi dengan tumpukan driver USB:

  • Usbd.sys

    Microsoft menyediakan pustaka Usbd.sys yang mengekspor rutinitas untuk driver klien USB. Rutinitas pembantu menyederhanakan tugas operasional driver klien. Misalnya, dengan menggunakan rutinitas pembantu, driver klien USB dapat membangun Blok Permintaan USB (URB) untuk operasi tertentu, seperti memilih konfigurasi, dan mengirimkan URL tersebut ke tumpukan driver USB.

  • Usbdex.lib

    Pustaka pembantu ini baru untuk Windows 8. Pustaka mengekspor rutinitas terutama untuk mengalokasikan dan membangun URL. Rutinitas tersebut menggantikan beberapa rutinitas warisan yang diekspor oleh Usbd.sys. Rutinitas baru mengharuskan driver klien untuk mendaftar dengan tumpukan driver USB, yang mempertahankan handel untuk pendaftaran. Handel itu digunakan untuk panggilan ke rutinitas Usbdex.lib lainnya. URB tertentu yang dialokasikan oleh rutinitas baru memiliki konteks URB yang digunakan driver USB untuk pelacakan dan pemrosesan yang lebih baik. Untuk informasi selengkapnya, lihat Mengalokasikan dan Membangun URL.

  • Winusb.dll

    Winusb.dll adalah DLL mode pengguna yang mengekspos fungsi WinUSB untuk berkomunikasi dengan Winusb.sys, yang dimuat sebagai driver fungsi perangkat dalam mode kernel. Aplikasi menggunakan fungsi ini untuk mengonfigurasi perangkat, mengambil informasi tentang perangkat, dan melakukan operasi I/O. Untuk informasi tentang menggunakan fungsi-fungsi ini, lihat Cara Mengakses Perangkat USB dengan Menggunakan Fungsi WinUSB.