Memilih model driver untuk mengembangkan driver klien USB

Topik ini memberikan 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 perlu. Daftar berikut ini merangkum pilihan yang dibahas dalam topik 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 perangkat diakses oleh satu aplikasi, muat WinUSB sebagai driver fungsi.
  3. Jika perangkat perlu 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 menerapkan driver perangkat, (disebut sebagai 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 WINDOWS API.

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 kompleks, seperti inisialisasi driver ketika perangkat baru terdeteksi, manajemen daya, operasi I/O, penghapusan mendadak, manajemen status, dan pembersihan saat 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 milik kelas perangkat USB yang didukung oleh Microsoft.

    Dalam hal ini, driver kelas yang sesuai dimuat sebagai driver perangkat. Untuk daftar kelas perangkat yang windowsnya 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 (Winusb.sys) yang disediakan Microsoft 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 yang disukai 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.

      Dalam Windows 8, kami telah menambahkan ID baru 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 jauh 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 atau sistem lain, dan akhirnya merusak 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 memanfaatkan 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 Pengandar 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 mengimplementasikan 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 kumpulan 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 2012 menyertakan driver usb User-Mode dan templat USB Kernel-Mode Driver yang masing-masing menghasilkan kode starter untuk driver klien USB UMDF dan KMDF. Kode templat menginisialisasi objek perangkat target USB untuk mengaktifkan komunikasi dengan perangkat keras. Untuk informasi selengkapnya, lihat topik 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 WinUSB, driver USB berbasis 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 berlebihan pada tumpukan USB Tidak Tidak Ya
Mendukung penangguhan selektif dan status tunggu/bangun Ya Ya Ya

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

Versi Windows WinUSB UMDF KMDF
Windows 8 Ya Ya Ya
Windows 7 Ya Ya Ya
Windows Vista Ya1 Ya1 Ya
Windows Server 2003 Tidak Tidak 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 versi Windows 8.1 atau yang lebih baru.

Semua SKU klien windows XP versi 32-bit dengan SP2support WinUSB. WinUSB tidak berasal dari Windows XP; harus diinstal dengan penginstal bersama WinUSB. Semua SKU Windows Vista dan versi Windows yang lebih baru mendukung WinUSB.