Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan minidriver dan driver kelas HID.
Untuk informasi selengkapnya, lihat Cara Membuat minidriver WDF HID.
Fitur operasional driver kelas HID
Driver kelas HID melakukan operasi berikut:
Menyediakan dan mengelola antarmuka tingkat atas yang digunakan driver mode kernel dan aplikasi mode pengguna untuk mengakses koleksi HID yang didukung perangkat input.
Driver kelas HID secara transparan mengelola dan merutekan semua komunikasi antara driver dan aplikasi tingkat atas dan perangkat input yang mendasar yang mendukung koleksi HID. Ini mengelola berbagai protokol data yang digunakan oleh perangkat input yang berbeda dan antrean input yang mendukung lebih dari satu file terbuka pada koleksi HID yang sama.
Antarmuka tingkat atas untuk koleksi HID terdiri dari IOCTL kelas driver HID, rutinitas pendukung HIDClass, dan struktur HIDClass.
Berkomunikasi dengan minidriver HID dengan memanfaatkan rutinitas driver standar dari minidriver.
Membuat objek perangkat fungsional (FDO) untuk perangkat input HIDClass yang dienumerasi oleh driver bus tingkat rendah atau driver port.
Misalnya, driver kelas HID membuat dan mengelola operasi FDO yang mewakili perangkat USB HID yang dijumlahkan oleh tumpukan driver USB yang disediakan sistem.
Menyediakan fungsionalitas driver bus untuk perangkat anak (koleksi HID) yang didukung oleh perangkat input yang mendasar.
Driver kelas HID membuat objek perangkat fisik (PDO) untuk setiap koleksi HID yang didukung oleh perangkat input dan mengelola operasi koleksi.
Mengikat minidriver ke HIDClass
Minidriver HID mengikat operasinya ke driver kelas HID dengan memanggil HidRegisterMinidriver untuk mendaftarkan dirinya dengan driver kelas HID. Operasi pendaftaran:
Menyimpan salinan dari titik masuk (pointer) ke rutinitas driver standar dari minidriver HID di ekstensi perangkat driver kelas HID.
Minidriver HID menetapkan titik masuknya di objek driver yang diterima minidriver sebagai input untuk rutinitas DRIVER_INITIALIZE-nya. Minidriver HID menetapkan titik masuk ini sebelum mendaftar dengan driver kelas HID.
Mengatur ulang titik masuk di objek driver minidriver ke titik masuk untuk rutinitas driver standar yang disediakan oleh driver kelas HID.
Driver kelas HID menyediakan rutinitas driver standar berikut:
rutinitas DRIVER_ADD_DEVICE dan DRIVER_UNLOAD
Mengatur pemrosesan untuk permintaan I/O berikut ini:
Proses pendaftaran juga mengalokasikan memori untuk ekstensi perangkat HID mind river. Meskipun memori dialokasikan oleh driver kelas HID, hanya minidriver HID yang menggunakan ekstensi perangkat ini.
Berkomunikasi dengan minidriver HID
Driver kelas HID berkomunikasi dengan minidriver HID dengan memanggil DRIVER_ADD_DEVICE, DRIVER_UNLOAD, dan rutinitas dispatch sebagai berikut:
Memanggil rutinitas AddDevice
Ketika rutinitas AddDevice driver kelas HID dipanggil untuk membuat objek perangkat fungsional (FDO), driver kelas HID membuat FDO, menginisialisasinya, dan memanggil rutinitas AddDevice minidriver HID. Rutinitas AddDevice minidriver HID melakukan inisialisasi khusus perangkat internal dan, jika berhasil, mengembalikan STATUS_SUCCESS. Jika rutinitas AddDevice minidriver HID tidak berhasil, driver kelas HID menghapus FDO dan mengembalikan status yang dikembalikan oleh rutinitas AddDevice minidriver HID.
Memanggil rutinitas Unload
Ketika metode Pembongkaran driver kelas HID dipanggil, driver kelas HID menyelesaikan pelepasan semua sumber daya terkait FDO dan memanggil metode Pembongkaran minidriver HID.
Memanggil rutinitas Pengiriman
Untuk mengoperasikan perangkat, driver kelas HID pada dasarnya memanggil rutinitas pengiriman minidriver HID untuk permintaan pengendalian perangkat internal.
Ketika manajer I/O mengirim permintaan ke driver kelas HID, driver kelas HID akan memproses permintaan tersebut dan memanggil rutinitas pengiriman yang sesuai dari minidriver HID.
Driver kelas HID tidak mengirim permintaan berikut ke minidriver HID: membuat, menutup, atau mengontrol perangkat.
Pengoperasian minidriver HID
Minidriver alat transportasi HID menyederhanakan pengoperasian bus perangkat keras atau port yang terhubung dengan perangkat input Anda.
Minidriver HID dapat dibuat menggunakan salah satu kerangka kerja berikut:
- UMDF – Kerangka Kerja Driver Mode Pengguna
- KDMF – Kerangka Kerja Driver Mode Kernel
- WDF - Windows Driver Framework
- WDM – Windows Driver Model (warisan)
Microsoft merekomendasikan penggunaan solusi berbasis Frameworks (KMDF atau UMDF). Untuk informasi selengkapnya tentang setiap model driver, kunjungi bagian berikut:
- Minidriver HID berbasis KMDF, lihat Membuat Minidriver HID berbasis Kerangka Kerja
- Minidriver HID yang berbasis UMDF, lihat Membuat Minidriver HID WDF
Bagian berikut membahas tentang pendaftaran minidriver HID berbasis WDM, tetapi sebagian besar juga relevan untuk driver Framework berbasis KMDF. Semua minidriver HID harus mendaftar dengan driver kelas HID, dan driver kelas HID berkomunikasi dengan minidriver dengan memanggil rutinitas driver standar minidriver.
Untuk informasi selengkapnya tentang fungsionalitas yang harus didukung oleh minidriver HID dalam rutinitas driver standarnya, lihat bagian berikut:
- Mendaftarkan minidriver HID
- Ekstensi minidriver HID
- Menggunakan struktur HID_DEVICE_EXTENSION
- Rutinitas minidriver standar
Untuk informasi selengkapnya tentang driver kelas HID, lihat Pengoperasian minidriver HID.
Mendaftarkan minidriver HID
Setelah minidriver HID menyelesaikan semua inisialisasi driver lainnya dalam rutinitas DRIVER_INITIALIZE , minidriver HID mengikat operasinya ke driver kelas HID dengan memanggil HidRegisterMinidriver.
Ketika minidriver HID mendaftar dengan driver kelas HID, itu menggunakan struktur HID_MINIDRIVER_REGISTRATION . Struktur menentukan:
- Revisi HID
- Objek driver HID minidriver
- Ukuran ekstensi perangkat minidriver HID
- Apakah perangkat dipantau
Ekstensi minidriver HID
Ekstensi perangkat minidriver HID bersifat spesifik untuk perangkat dan digunakan hanya oleh minidriver HID. Driver kelas HID mengalokasikan memori untuk ekstensi perangkat minidriver ketika driver kelas membuat ekstensi perangkatnya untuk objek perangkat fungsional (FDO). Minidriver HID menentukan ukuran ekstensi perangkatnya saat mendaftarkan minidriver dengan driver kelas HID. Ukuran ditentukan oleh anggota DeviceExtensionSize dari struktur HID_MINIDRIVER_REGISTRATION .
Menggunakan struktur HID_DEVICE_EXTENSION
Minidriver HID harus menggunakan struktur HID_DEVICE_EXTENSION sebagai tata letak untuk ekstensi perangkat yang dibuat oleh driver kelas HID untuk objek perangkat fungsional (FDO). Driver kelas HID mengatur anggota struktur ini saat menginisialisasi FDO. Minidriver HID tidak boleh mengubah informasi dalam struktur ini.
Struktur HID_DEVICE_EXTENSION berisi anggota berikut:
PhysicalDeviceObject adalah penunjuk ke objek perangkat fisik (PDO) yang mewakili perangkat input yang mendasar.
NextDeviceObject adalah penunjuk ke bagian atas tumpukan perangkat di bawah FDO.
MiniDeviceExtension adalah penunjuk ke ekstensi perangkat minidriver HID.
Diberikan sebuah penunjuk ke FDO dari perangkat input, makro GET_MINIDRIVER_DEVICE_EXTENSION berikut ini mengembalikan sebuah penunjuk ke ekstensi minidriver HID.
#define GET_MINIDRIVER_DEVICE_EXTENSION(DO) ((PDEVICE_EXTENSION) (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->MiniDeviceExtension))
PDEVICE_EXTENSION adalah penunjuk ke ekstensi perangkat spesifik yang dideklarasikan oleh minidriver HID.
Demikian pula, minidriver HID dapat memperoleh pointer ke PDO perangkat input dan ke bagian atas tumpukan perangkat di bawah FDO perangkat input.
Ketika minidriver HID mengirim IRP ke tumpukan perangkat, itu harus menggunakan NextDeviceObject sebagai objek perangkat target.
Rutinitas minidriver standar
Minidriver HID harus menyediakan rutinitas dukungan driver standar berikut:
- Rutinitas DriverEntry minidriver HID
- HID minidriver rutin AddDevice
- HID minidriver rutinitas pemongkaran
Minidriver HID juga harus mendukung rutinitas pengiriman yang dijelaskan dalam rutinitas Pengiriman yang Disediakan oleh minidriver HID.
Rutinitas DriverEntry
Rutinitas DRIVER_INITIALIZE dalam minidriver HID melakukan hal berikut:
Membuat objek pengandar untuk pasangan pengandar yang terhubung (pengandar kelas HID dan pengandar mini HID).
Mengatur titik masuk driver yang diperlukan di objek driver minidriver HID.
Memanggil HidRegisterMinidriver untuk mendaftarkan minidriver HID dengan driver kelas HID.
Apakah konfigurasi khusus perangkat yang hanya digunakan oleh minidriver HID.
Rutin TambahPerangkat
Driver kelas HID menangani pembuatan dan inisialisasi objek perangkat fungsional (FDO) untuk perangkat input yang mendasar. Driver kelas HID juga mengoperasikan FDO dari perspektif antarmuka tingkat atas terhadap perangkat dasar dan perangkat turunannya (koleksi HID).
Driver kelas HID memiliki rutin DRIVER_ADD_DEVICE yang memanggil rutinitas AddDevice pada HID minidriver agar minidriver dapat melakukan inisialisasi spesifik perangkat internal.
Parameter yang diteruskan ke rutinitas minidriver HID DRIVER_ADD_DEVICE adalah objek driver minidriver dan FDO. Driver kelas HID meneruskan FDO ke rutinitas AddDevice minidriver, bukan ke objek perangkat fisik untuk perangkat input yang mendasar.
Minidriver HID DRIVER_ADD_DEVICE rutin mendapatkan pointer ke ekstensi perangkat minidriver dari FDO.
Biasanya, minidriver HID DRIVER_ADD_DEVICE rutin melakukan hal berikut:
Menginisialisasi ekstensi perangkat minidriver. Ekstensi perangkat hanya digunakan oleh minidriver.
Mengembalikan STATUS_SUCCESS. Jika minidriver mengembalikan status kesalahan, driver kelas HID akan menghapus FDO dan mengembalikan status kesalahan ke manajer Plug and Play.
Membongkar rutinitas
Rutin Unload dari driver kelas HID memanggil rutin minidriver HID DRIVER_UNLOAD. Minidriver HID melepaskan semua sumber daya internal yang dialokasikan oleh minidriver tersebut.
Rutin pengiriman
Minidriver HID harus menyediakan rutinitas pengiriman berikut: membuat, menutup, kontrol perangkat internal, kontrol sistem, Plug and Play, dan manajemen daya. Kecuali untuk permintaan kontrol perangkat internal, sebagian besar rutinitas pengiriman ini menyediakan fungsi minimal. Ketika driver kelas HID memanggil rutinitas pengiriman ini, driver tersebut melewati objek driver minidriver dan objek perangkat fungsional (FDO).
IRP_MJ_CREATE
Sesuai dengan persyaratan WDM, driver kelas HID dan minidriver HID menyediakan rutinitas pengiriman untuk membuat permintaan. Namun, FDO tidak dapat dibuka. Driver kelas HID mengembalikan kode status STATUS_UNSUCCESSFUL.
Minidriver HID hanya perlu menyediakan sebuah stub. Rutinitas pembuatan pengiriman tidak pernah dipanggil.
IRP_MJ_CLOSE
Sesuai dengan persyaratan WDM, driver kelas HID dan minidriver HID harus menyediakan rutinitas pengiriman untuk permintaan dekat. Namun, FDO tidak dapat dibuka. Driver kelas HID mengembalikan STATUS_INVALID_PARAMETER_1.
Minidriver HID hanya perlu menyediakan stub. Rutinitas pengiriman dekat tidak pernah dipanggil.
IRP_MJ_DEVICE_CONTROL
Minidriver HID tidak memerlukan rutinitas pengiriman untuk permintaan kontrol perangkat. Driver kelas HID tidak meneruskan permintaan kontrol perangkat ke minidriver.
IRP_MJ_INTERNAL_DEVICE_CONTROL (Kontrol Perangkat Internal)
Minidriver HID harus menyediakan rutinitas pengiriman untuk permintaan kontrol perangkat internal yang mendukung permintaan sebagaimana dijelaskan dalam IOCTL minidriver HID.
Driver kelas HID terutama menggunakan permintaan kontrol perangkat internal untuk mengakses perangkat input yang mendasar.
Minidriver HID menangani permintaan ini berdasarkan karakteristik perangkat.
IRP_MJ_SYSTEM_CONTROL
Minidriver HID harus menyediakan rutinitas pengiriman untuk permintaan kontrol sistem. Namun, minidriver HID hanya diperlukan untuk meneruskan permintaan kontrol sistem ke tumpukan perangkat sebagai berikut:
Lewati lokasi tumpukan IRP saat ini
Kirim permintaan melalui tumpukan perangkat FDO
IRP_MJ_PNP
Minidriver HID harus menyediakan rutinitas pengiriman untuk permintaan Plug and Play.
Driver kelas HID menangani semua pemrosesan Plug and Play yang berhubungan dengan FDO. Ketika pengandar kelas HID memproses permintaan Plug and Play, pengandar tersebut memanggil rutin penanganan Plug and Play dari minidriver HID.
Rutinitas pengiriman Plug and Play minidriver HID:
Menangani pengiriman permintaan ke tumpukan perangkat FDO dan menyelesaikan permintaan saat permintaan tersebut kembali naik melalui tumpukan perangkat, sesuai dengan jenis permintaan tersebut.
Melakukan pemrosesan khusus untuk perangkat yang terkait dengan permintaan tertentu untuk memperbarui informasi tentang status FDO.
Misalnya, minidriver mungkin memperbarui status Plug and Play dari FDO (khususnya, apakah FDO dimulai, dihentikan, atau sedang dalam proses dihapus).
IRP_MJ_POWER
Minidriver HID harus menyediakan rutinitas pengiriman untuk permintaan daya. Namun, driver kelas HID menangani pemrosesan daya untuk FDO.
Sesuai dengan persyaratan WDM, minidriver HID mengirimkan permintaan daya ke tumpukan perangkat FDO dengan cara ini:
Mengabaikan lokasi tumpukan IRP saat ini
Memulai IRP daya berikutnya
Mengirim IRP daya ke tumpukan perangkat FDO
Biasanya, minidriver HID meneruskan permintaan daya ke tumpukan perangkat tanpa pemrosesan tambahan.