Bagikan melalui


Memilih model driver untuk mengembangkan driver klien USB

Artikel ini menyediakan panduan untuk memilih model driver terbaik untuk mengembangkan driver klien USB yang bertindak sebagai driver fungsi perangkat.

Produsen perangkat USB harus sering menyediakan cara bagi aplikasi untuk mengakses fitur perangkat. Untuk memilih mekanisme terbaik untuk mengakses perangkat USB, mulailah dengan pendekatan paling sederhana dan pindah ke solusi yang lebih kompleks hanya jika diperlukan. Daftar berikut ini meringkas pilihan yang dibahas dalam artikel ini:

  1. Jika perangkat Anda termasuk dalam kelas perangkat USB tempat Windows menyertakan driver kotak masuk, Anda tidak perlu menulis driver.
  2. Jika perangkat Anda tidak memiliki driver kelas yang disediakan Microsoft, dan hanya satu aplikasi yang mengakses perangkat, muat WinUSB sebagai driver fungsi.
  3. Jika perangkat diakses oleh aplikasi bersamaan dan perangkat Anda tidak memiliki titik akhir isochronous, tulis driver klien berbasis UMDF.
  4. Jika solusi driver kelas, WinUSB, atau UMDF bukan opsi yang berfungsi untuk Anda, tulis driver klien berbasis KMDF.
  5. Jika fitur tertentu tidak didukung oleh KMDF, tulis driver hibrid yang memanggil rutinitas WDM.

Pendekatan yang paling umum adalah mengimplementasikan driver perangkat (istilah driver klien USB dalam set dokumentasi ini), dan menyediakan paket penginstalan yang menginstal driver sebagai driver fungsi di tumpukan perangkat di atas tumpukan driver USB yang disediakan Microsoft. Driver klien mengekspos antarmuka perangkat yang dapat digunakan aplikasi untuk mendapatkan handel file perangkat. Aplikasi kemudian dapat menggunakan handel file ini untuk berkomunikasi dengan driver dengan memanggil API Windows.

Menulis driver yang disesuaikan dengan persyaratan perangkat adalah cara paling fleksibel untuk menyediakan akses ke perangkat USB. Namun, menerapkan driver membutuhkan banyak pekerjaan. Driver harus melakukan tugas yang kompleks, seperti:

  • Inisialisasi driver ketika perangkat baru terdeteksi
  • Manajemen daya
  • Operasi I/O
  • Penghapusan perangkat kejutan
  • Manajemen Status
  • Bersihkan ketika perangkat dihapus

Sebelum Anda memilih untuk menulis driver, ajukan pertanyaan berikut:

Dapatkah Anda menggunakan driver yang disediakan Microsoft?

Anda mungkin tidak perlu menulis driver jika:

  • Perangkat Anda termasuk dalam kelas perangkat USB yang didukung Microsoft.

    Dalam hal ini, driver kelas yang sesuai dimuat sebagai driver perangkat. Untuk daftar kelas perangkat di mana Windows menyertakan driver kotak masuk, lihat Driver kelas perangkat USB yang disertakan dalam Windows.

  • Perangkat Anda bukan milik kelas perangkat.

    Untuk perangkat tersebut, evaluasi fitur perangkat untuk menentukan apakah Anda dapat memuat WinUSB yang disediakan Microsoft (Winusb.sys) sebagai driver fungsi perangkat. Menggunakan WinUSB adalah solusi terbaik jika:

    • Perangkat Anda diakses oleh satu aplikasi.

    • Perangkat Anda mendukung titik akhir massal, interupsi, atau isochronous.

    • Perangkat Anda dimaksudkan untuk bekerja dengan komputer target yang menjalankan Windows XP dengan Paket Layanan 2 (SP2) dan versi Windows yang lebih baru.

      Memuat WinUSB sebagai driver fungsi memberikan alternatif yang lebih sederhana untuk mengimplementasikan driver USB kustom. Misalnya, WinUSB adalah pendekatan pilihan untuk stasiun cuaca elektronik yang hanya diakses oleh aplikasi yang dipaketkan dengan perangkat. Ini juga berguna untuk komunikasi diagnostik dengan perangkat dan untuk flashing firmware.

      Untuk memudahkan aplikasi mengirim permintaan ke Winusb.sys, kami menyediakan DLL mode pengguna, Winusb.dll, yang mengekspos fungsi WinUSB. Aplikasi dapat memanggil fungsi tersebut untuk mengakses perangkat, mengonfigurasinya, dan mentransfer data ke titik akhir perangkat.

      WinUSB bukan pilihan jika:

    • Perangkat Anda diakses oleh beberapa aplikasi.

    • Perangkat Anda memiliki fungsi yang sudah memiliki dukungan mode kernel di sistem operasi Windows. Misalnya, untuk fungsi modem (yang didukung TAPI) atau fungsi LAN (yang didukung NDIS), Anda harus menggunakan antarmuka yang didukung driver Usbser.sys untuk mengelola perangkat modem dengan perangkat lunak mode pengguna.

      Mulai dari Windows 8, kami menambahkan ID yang kompatibel ke INF untuk penginstalan WinUSB. Jika firmware perangkat berisi ID yang kompatibel, WinUSB dimuat secara default sebagai driver fungsi untuk perangkat. Ini berarti bahwa produsen perangkat keras tidak diperlukan untuk mendistribusikan file INF untuk perangkat WinUSB mereka. Untuk informasi selengkapnya, lihat Perangkat WinUSB.

Jika Anda menulis driver klien USB, model driver mana yang terbaik?

Jawabannya tergantung pada desain perangkat Anda. Pertama, tentukan apakah model driver tertentu memenuhi kebutuhan Anda. Beberapa pertimbangan desain didasarkan pada apakah Anda ingin perangkat USB diakses oleh beberapa aplikasi bersamaan dan mendukung streaming data melalui titik akhir isochronous.

Jika Anda memilih untuk menulis driver, berikut adalah opsi Anda:

  • Kerangka Kerja Driver Mode Pengguna (UMDF)

    UMDF menyediakan antarmuka driver perangkat (DDI) yang dapat digunakan driver klien untuk berintegrasi dengan komponen Windows seperti Plug and Play Manager dan Power Manager. UMDF juga menyediakan objek target khusus untuk perangkat USB, yang mengabstraksi perangkat keras dalam mode pengguna dan menyederhanakan operasi I/O untuk driver. Selain antarmuka UMDF, WDF menyediakan ekstensi debugger yang ditingkatkan dan alat pelacakan untuk driver mode pengguna. UMDF didasarkan pada model objek komponen (COM) dan mengembangkan driver mode pengguna lebih mudah bagi pengembang C++.

    Terapkan driver klien berbasis UMDF untuk perangkat USB dalam kasus berikut:

    • Perangkat diakses secara bersamaan oleh beberapa aplikasi.

    • Perangkat mendukung transfer massal atau interupsi.

      Driver yang berjalan dalam mode pengguna hanya dapat mengakses ruang alamat pengguna (virtual) dan menimbulkan risiko yang lebih rendah terhadap sistem. Driver mode kernel dapat mengakses ruang alamat sistem dan struktur sistem internal. Driver mode kernel yang dikodekan dengan buruk dapat menyebabkan masalah yang memengaruhi driver lain atau sistem, dan akhirnya menabrak komputer. Oleh karena itu, driver mode pengguna dapat lebih aman daripada driver mode kernel dalam hal keamanan dan stabilitas.

      Keuntungan lain dari driver mode pengguna adalah mereka dapat menggunakan semua API Win32. Misalnya, driver dapat memanggil API seperti Winsock, Kompresi, API Enkripsi, dan sebagainya. API tersebut tidak tersedia untuk driver mode kernel.

      Driver klien berbasis UMDF bukanlah opsi untuk perangkat USB yang mendukung titik akhir isochronous.

      Catatan

      Windows 8.1 memperkenalkan UMDF versi 2.0. Dengan UMDF versi 2.0, Anda dapat menulis driver UMDF dalam bahasa pemrograman C yang memanggil banyak metode yang tersedia untuk driver KMDF. Anda tidak dapat menggunakan UMDF versi 2.0 untuk menulis driver filter yang lebih rendah untuk USB.

  • Kerangka Kerja Driver Mode Kernel (KMDF)

    KMDF dirancang untuk membuat model driver mudah diperluas untuk mendukung jenis perangkat keras baru. KMDF menyediakan DDI dan struktur data yang membuat driver USB mode kernel lebih mudah diimplementasikan daripada driver Windows Driver Model (WDM) sebelumnya. Selain itu, KMDF menyediakan target input/output (I/O) khusus yang dapat Anda gunakan untuk menulis driver klien yang berfungsi penuh yang menggunakan tumpukan driver USB Microsoft.

    Dalam kasus tertentu di mana fitur tertentu tidak diekspos melalui KMDF, driver harus memanggil rutinitas WDM. Driver tidak perlu menerapkan seluruh infrastruktur WDM tetapi menggunakan metode KMDF untuk mengakses serangkaian rutinitas WDM tertentu. Misalnya, untuk melakukan transfer isochronous, driver klien berbasis KMDF dapat mengirim URL bergaya WDM yang menjelaskan permintaan ke tumpukan driver USB. Driver tersebut disebut driver hibrid dalam set dokumentasi ini.

    KMDF juga mendukung model driver port-miniport. Misalnya, driver miniport streaming kernel (seperti webcam USB) yang menggunakan streaming kernel di tepi atas dapat menggunakan objek target KMDF USB I/O untuk mengirim permintaan ke tumpukan driver USB. Driver NDIS juga dapat ditulis dengan menggunakan KMDF untuk bus berbasis protokol seperti USB.

    Driver WDM murni sulit ditulis, kompleks, dan tidak kuat. Dengan evolusi KMDF, menulis jenis driver ini tidak lagi diperlukan.

Microsoft Visual Studio mencakup Driver Mode Pengguna USB dan templat Driver Mode Kernel USB yang masing-masing menghasilkan kode pemula untuk driver klien UMDF dan KMDF USB. Kode templat menginisialisasi objek perangkat target USB untuk mengaktifkan komunikasi dengan perangkat keras. Untuk informasi lebih lanjut, baca artikel berikut:

Untuk informasi tentang cara menerapkan driver UMDF dan KMDF, lihat buku Microsoft Press Mengembangkan Driver dengan Windows Driver Foundation.

Perbandingan Fitur WinUSB, UMDF, KMDF

Tabel berikut merangkum kemampuan driver USB berbasis WinUSB, UMDF, dan driver USB berbasis KMDF.

Fitur WinUSB UMDF KMDF
Mendukung beberapa aplikasi bersamaan Tidak Ya Ya
Mengisolasi ruang alamat driver dari ruang alamat aplikasi Tidak Ya Tidak
Mendukung transfer massal, interupsi, dan kontrol Ya Ya Ya
Mendukung transfer isochronous Ya 4 Tidak Ya
Mendukung penginstalan driver mode kernel, seperti driver filter, sebagai lapisan yang terlalu mengandalkan pada tumpukan USB Tidak No Ya
Mendukung penangguhan selektif dan status tunggu/bangun Ya Ya Ya

Tabel berikut ini meringkas opsi WDF yang didukung versi Windows yang berbeda.

Versi Windows WinUSB UMDF KMDF
Windows 11 Ya Ya Ya
Windows 10 Ya Ya Ya
Windows 8 Ya Ya Ya
Windows 7 Ya Ya Ya
Windows Vista Ya1 Ya1 Ya
Windows Server 2003 Tidak No Ya
Windows XP Ya2 Ya2 Ya
Microsoft Windows 2000 Tidak Tidak Ya3

Ya1: WinUSB dan UMDF hanya didukung pada Windows versi berbasis x86 dan berbasis x64.

Ya2: WINUSB dan UMDF didukung di Windows XP dengan Paket Layanan 2 (SP2) atau versi Windows yang lebih baru.

Ya3: KMDF didukung di Windows 2000 dengan SP4 atau versi Windows yang lebih baru.

Ya4: Transfer isochronous didukung di Windows 8.1 atau versi Windows yang lebih baru.

Semua SKU klien windows XP versi 32-bit dengan dukungan SP2 WinUSB. WinUSB bukan asli Windows XP, ini harus diinstal dengan coinstaller WinUSB. Semua SKU Windows Vista dan versi Windows yang lebih baru mendukung WinUSB.