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.
Catatan
Topik ini untuk pengembang yang membuat driver untuk klien HID keyboard dan mouse. Jika Anda ingin memperbaiki mouse atau keyboard, lihat:
Artikel ini membahas driver klien HID keyboard dan mouse. Keyboard dan tikus mewakili set pertama klien HID yang distandarkan dalam tabel penggunaan HID dan diimplementasikan dalam sistem operasi Windows.
Driver klien HID keyboard dan mouse diimplementasikan dalam bentuk HID Mapper Drivers. Driver pemeta HID adalah driver filter WDM mode kernel yang menyediakan antarmuka dua arah untuk permintaan I/O antara driver Kelas non-HID dan driver kelas HID. Driver pemeta memetakan permintaan I/O dan protokol data satu ke yang lain.
Windows menyediakan driver pemeta HID yang disediakan sistem untuk keyboard HID, dan perangkat tikus HID.
Arsitektur dan gambaran umum
Gambar berikut mengilustrasikan tumpukan driver yang disediakan sistem untuk keyboard USB, mouse, dan perangkat touchpad.
Gambar menunjukkan komponen berikut:
- KBDHID.sys: Driver pemeta klien HID untuk keyboard. Mengonversi penggunaan HID menjadi kode pemindaian ke antarmuka dengan driver kelas keyboard yang ada.
- MOUHID.sys: Driver pemeta klien HID untuk tikus/touchpad. Mengonversi penggunaan HID menjadi perintah mouse (X/Y, tombol, roda) ke antarmuka dengan driver kelas keyboard yang ada.
- KBDCLASS.sys: Driver kelas keyboard menyediakan fungsionalitas untuk semua keyboard dan keypad pada sistem dengan cara yang aman.
- MOUCLASS.sys: Driver kelas mouse menyediakan fungsionalitas untuk semua tikus dan touchpad pada sistem. Driver mendukung perangkat penunjuk absolut dan relatif. MOUCLASS.sys bukan driver Windows untuk layar sentuh.
- HIDCLASS.sys: Driver kelas HID. Driver Kelas HID adalah lem antara klien HID KBDHID.sys dan MOUHID.sys dan berbagai transportasi, seperti USB, Bluetooth, dan sebagainya.
Sistem membangun tumpukan driver sebagai berikut:
- Tumpukan transportasi membuat objek perangkat fisik (PDO) untuk setiap perangkat HID yang terpasang dan memuat driver transportasi HID yang sesuai, yang pada gilirannya memuat Driver Kelas HID.
- Driver kelas HID membuat PDO untuk setiap keyboard atau TLC mouse. Perangkat HID kompleks (lebih dari satu TLC) diekspos sebagai beberapa PDO yang dibuat oleh driver kelas HID. Misalnya, keyboard dengan mouse terintegrasi mungkin memiliki satu koleksi untuk kontrol keyboard standar dan koleksi yang berbeda untuk mouse.
- Driver pemeta klien HID keyboard atau mouse dimuat pada FDO yang sesuai.
- Driver pemeta HID membuat FDO untuk keyboard dan mouse, dan memuat driver kelas.
Catatan Penting
- Driver vendor tidak diperlukan untuk keyboard dan tikus yang mematuhi Penggunaan HID yang didukung dan koleksi tingkat atas.
- Vendor secara opsional menyediakan driver filter di tumpukan HID untuk mengubah/meningkatkan fungsionalitas TLC tertentu ini.
- Vendor harus membuat TLC terpisah dan spesifik vendor untuk bertukar data kepemilikan antara klien HID mereka dan perangkat. Hindari menggunakan driver filter kecuali penting.
- Sistem membuka semua koleksi keyboard dan mouse untuk penggunaan eksklusifnya.
- Sistem mencegah penonaktifan/pengaktifan keyboard.
- Sistem ini memberikan dukungan untuk roda horizontal/vertikal dengan kemampuan pengguliran yang halus.
Panduan Driver
Microsoft menyediakan panduan ini untuk driver penulisan IHV:
Pengembang driver diizinkan untuk menambahkan lebih banyak driver dalam bentuk driver filter atau driver klien HID baru.
Driver filter: Pengembang driver harus memastikan bahwa driver value-add mereka adalah driver filter dan tidak menggantikan (atau digunakan sebagai ganti) driver Windows HID yang ada di tumpukan input.
- Driver filter diizinkan dalam skenario ini:
- Sebagai filter atas ke kbdhid/mouhid
- Sebagai filter atas untuk kbdclass/mouclass
- Driver filter tidak disarankan sebagai filter antara minidriver transportasi HIDCLASS dan HID
- Driver filter diizinkan dalam skenario ini:
Driver fungsi: Atau vendor dapat membuat driver fungsi (bukan driver filter) tetapi hanya untuk PDO HID khusus vendor (dengan layanan mode pengguna jika perlu).
Driver fungsi diizinkan dalam skenario ini:
- Hanya muat pada perangkat keras vendor tertentu
Driver transportasi: Tim Windows tidak menyarankan untuk membuat lebih banyak minidriver transportasi HID yang kompleks untuk ditulis dan dikelola. Jika mitra membuat minidriver transportasi HID baru, terutama pada sistem SoC, kami merekomendasikan tinjauan arsitektur terperinci untuk memahami penalaran dan memastikan bahwa pengemudi dikembangkan dengan benar.
Pengembang driver harus menggunakan kerangka kerja driver (KMDF atau UMDF) dan tidak mengandalkan WDM untuk driver filter mereka.
Pengembang driver harus mengurangi jumlah transisi kernel-user antara layanan mereka dan tumpukan driver.
Pengembang driver harus memastikan kemampuan untuk membangunkan sistem melalui fungsi keyboard dan touchpad (dapat disesuaikan oleh pengguna akhir (manajer perangkat) atau produsen PC). Selain sistem SoC, perangkat ini harus dapat membangunkan diri dari keadaan bertenaga lebih rendah saat sistem berada dalam status S0 yang berfungsi.
Pengembang driver harus memastikan bahwa perangkat keras mereka dikelola secara efisien.
- Perangkat dapat masuk ke status daya terendahnya ketika perangkat diam.
- Perangkat berada dalam status daya terendah ketika sistem dalam status daya rendah (misalnya, siaga (S3) atau siaga terhubung).
Tata letak keyboard
Tata letak keyboard sepenuhnya menjelaskan karakteristik input keyboard untuk Microsoft Windows 2000 dan versi yang lebih baru. Misalnya, tata letak keyboard menentukan bahasa, jenis dan versi keyboard, pengubah, kode pemindaian, dan sebagainya.
Lihat sumber daya ini untuk informasi tentang tata letak keyboard:
File header keyboard, kdb.h, di Windows Driver Development Kit (DDK), yang mendanai informasi umum tentang tata letak keyboard.
Contoh tata letak keyboard.
Untuk memvisualisasikan tata letak keyboard tertentu, lihat Tata Letak Keyboard Windows.
Untuk detail selengkapnya sekeliling tata letak keyboard, kunjungi Panel Kontrol\Jam, Bahasa, dan Wilayah\Bahasa.
Tombol dan roda yang didukung pada tikus
Tabel berikut mengidentifikasi fitur yang didukung di berbagai versi klien sistem operasi Windows.
Fitur | Windows XP | Windows Vista | Windows 7 | Windows 8 dan yang lebih baru |
---|---|---|---|---|
Tombol 1-5 | Didukung (P/2 & HID) | Didukung (PS/2 & HID) | Didukung (PS/2 & HID) | Didukung (PS/2 & HID) |
Roda Gulir Vertikal | Didukung (PS/2 & HID) | Didukung (PS/2 & HID) | Didukung (PS/2 & HID) | Didukung (PS/2 & HID) |
Roda Gulir Horizontal | Tidak Didukung | Didukung(hanya HID) | Didukung(hanya HID) | Didukung(hanya HID) |
Dukungan Roda Gulir Halus (Horizontal dan Vertikal) | Tidak Didukung | Sebagian Didukung | Didukung (hanya HID) | Didukung (hanya HID) |
Mengaktifkan tombol 4-5 dan roda pada tikus PS/2
Metode yang digunakan oleh Windows untuk mengaktifkan mode empat dan lima tombol dan roda baru adalah ekstensi dari metode yang digunakan untuk mengaktifkan tombol ketiga dan roda pada tikus yang kompatibel dengan IntelliMouse:
Mouse diatur ke mode roda tiga tombol dengan mengatur laju laporan menjadi 200 laporan per detik, lalu ke 100 laporan per detik, lalu ke 80 laporan per detik. Kemudian, membaca ID dari mouse. Mouse harus melaporkan ID 3 ketika urutan ini selesai.
Mouse kemudian diatur ke mode roda lima tombol dengan mengatur laju laporan menjadi 200 laporan per detik, lalu ke 200 laporan per detik lagi, lalu ke 80 laporan per detik. Kemudian, membaca ID dari mouse. Setelah urutan selesai, mouse roda lima tombol harus melaporkan ID 4 (sedangkan mouse roda tiga tombol yang kompatibel dengan IntelliMouse masih akan melaporkan ID 3).
Metode ini hanya berlaku untuk tikus PS/2, bukan tikus HID. Tikus HID harus melaporkan penggunaan yang akurat dalam deskriptor laporan mereka.
Format paket data mouse standar yang kompatibel dengan PS/2 (dua tombol)
Byte | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Komentar |
---|---|---|---|---|---|---|---|---|---|
1 | Yover | Xover | Ysign | Xsign | Tag | M | R | L | X/Y meluap dan tanda, tombol |
2 | X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | Byte data X |
3 | Y7 | Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 | Byte data Y |
Catatan
Pengandar tetikus Windows tidak memeriksa bit luapan. Dalam kasus luapan, mouse hanya boleh mengirim nilai perpindahan yang ditandatangani maksimal.
Format paket data mouse standar yang kompatibel dengan PS/2 (tiga tombol + roda vertikal)
Byte | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Komentar |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | Ysign | Xsign | 1 | M | R | L | Tanda X/Y dan tombol R/L/M |
2 | X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | Byte data X |
3 | Y7 | Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 | Byte data Y |
4 | Z7 | Z6 | Z5 | Z4 | Z3 | Z2 | Z1 | Z0 | Byte data Z/wheel |
Format paket data mouse standar yang kompatibel dengan PS/2 (lima tombol + roda vertikal)
Byte | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Komentar |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | Ysign | Xsign | 1 | M | R | L | Tanda X/Y dan tombol R/L/M |
2 | X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | Byte data X |
3 | Y7 | Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 | Byte data Y |
4 | 0 | 0 | B5 | B4 | Z3 | Z2 | Z1 | Z0 | Data dan tombol Z/wheel 4 dan 5 |
Penting
Perhatikan bahwa data Z/wheel untuk mouse roda lima tombol telah dikurangi menjadi empat bit alih-alih 8 bit yang digunakan dalam mode roda tiga tombol yang kompatibel dengan IntelliMouse. Pengurangan ini dimungkinkan oleh fakta bahwa roda biasanya tidak dapat menghasilkan nilai di luar rentang +7/-8 selama periode interupsi tertentu. Driver mouse Windows akan menandatangani perpanjangan bit data empat Z/roda ketika mouse berada dalam mode roda lima tombol, dan byte data Z/wheel penuh ketika mouse beroperasi dalam mode roda tiga tombol.
Tombol 4 & 5 aktif dipetakan ke pesan WM_APPCOMMAND dan sesuai dengan App_Back dan App_Forward.
Perangkat tidak memerlukan driver vendor
Driver vendor tidak diperlukan untuk perangkat berikut:
- Perangkat yang mematuhi Standar HID.
- Perangkat keyboard, mouse, atau port permainan yang dioperasikan oleh driver non-HIDClass yang disediakan sistem.
Sampel Kbfiltr
Kbfiltr digunakan dengan Kbdclass, driver kelas sistem untuk perangkat keyboard dan I8042prt, driver fungsi untuk keyboard gaya PS/2. Kbfiltr menunjukkan cara memfilter permintaan I/O dan cara menambahkan rutinitas panggilan balik yang memodifikasi operasi Kbdclass dan I8042prt.
Untuk informasi selengkapnya tentang operasi Kbfiltr, lihat:
File header WDK ntddkbd.h .
Sampel kode sumber Kbfiltr .
Kode kontrol Kbfiltr IO
IOCTL berikut digunakan oleh Kbfiltr.
IOCTL_INTERNAL_I8042_HOOK_KEYBOARD
Permintaan IOCTL_INTERNAL_I8042_HOOK_KEYBOARD:
- Menambahkan rutinitas panggilan balik inisialisasi ke rutinitas inisialisasi keyboard I8042prt.
- Menambahkan rutinitas panggilan balik ISR ke ISR keyboard I8042prt.
Inisialisasi dan panggilan balik ISR bersifat opsional dan disediakan oleh driver filter tingkat atas untuk perangkat keyboard bergaya PS/2.
Setelah I8042prt menerima permintaan IOCTL_INTERNAL_KEYBOARD_CONNECT, I8042prt mengirimkan permintaan IOCTL_INTERNAL_I8042_HOOK_KEYBOARD sinkron ke bagian atas tumpukan perangkat keyboard.
Setelah Kbfiltr menerima permintaan keyboard hook, Kbfiltr memfilter permintaan dengan cara berikut:
- Menyimpan informasi tingkat atas yang diteruskan ke Kbfiltr, yang mencakup konteks objek perangkat tingkat atas, penunjuk ke panggilan balik inisialisasi, dan penunjuk ke panggilan balik ISR.
- Mengganti informasi tingkat atas dengan informasinya sendiri.
- Menyimpan konteks I8042prt dan pointer ke panggilan balik yang dapat digunakan oleh panggilan balik ISR Kbfiltr.
IOCTL_INTERNAL_KEYBOARD_CONNECT
Permintaan IOCTL_INTERNAL_KEYBOARD_CONNECT menghubungkan layanan Kbdclass ke perangkat keyboard. Kbdclass mengirimkan permintaan ini ke tumpukan perangkat keyboard sebelum membuka perangkat keyboard.
Setelah Kbfiltr menerima permintaan koneksi keyboard, Kbfiltr memfilter permintaan sambungkan dengan cara berikut:
- Menyimpan salinan struktur CONNECT_DATA Kbdclass (Kbdclass) yang diteruskan ke driver filter oleh Kbdclass.
- Menggantikan informasi koneksinya sendiri untuk informasi koneksi driver kelas.
- Mengirim permintaan IOCTL_INTERNAL_KEYBOARD_CONNECT ke tumpukan perangkat.
Jika permintaan tidak berhasil, Kbfiltr menyelesaikan permintaan dengan status kesalahan yang sesuai.
Kbfiltr menyediakan templat untuk rutinitas panggilan balik layanan filter yang dapat melengkapi operasi KeyboardClassServiceCallback, rutinitas panggilan balik layanan kelas Kbdclass. Panggilan balik layanan filter dapat memfilter data input yang ditransfer dari buffer input perangkat ke antrean data kelas.
IOCTL_INTERNAL_KEYBOARD_DISCONNECT
Permintaan IOCTL_INTERNAL_KEYBOARD_DISCONNECT diselesaikan dengan status STATUS_NOT_IMPLEMENTED. Manajer Plug and Play dapat menambahkan atau menghapus keyboard Plug and Play.
Untuk semua permintaan kontrol perangkat lainnya, Kbfiltr melewati tumpukan IRP saat ini dan mengirim permintaan ke tumpukan perangkat tanpa pemrosesan lebih lanjut.
Rutinitas panggilan balik yang diimplementasikan oleh Kbfiltr
Kbfiltr mengimplementasikan rutinitas panggilan balik berikut.
KbFilter_InitializationRoutine
Lihat PI8042_KEYBOARD_INITIALIZATION_ROUTINE
KbFilter_InitializationRoutine tidak diperlukan jika inisialisasi default I8042prt dari keyboard sudah cukup.
I8042prt memanggil KbFilter_InitializationRoutine saat menginisialisasi keyboard. Inisialisasi keyboard default mencakup operasi berikut:
- reset keyboard
- mengatur laju dan penundaan typematic
- mengatur dioda pemancar cahaya (LED)
/*
Parameters
DeviceObject [in]
Pointer to the device object that is the context for this callback.
SynchFuncContext [in]
Pointer to the context for the routines pointed to by ReadPort and Writeport.
ReadPort [in]
Pointer to the system-supplied PI8042_SYNCH_READ_PORT callback that reads from the port.
WritePort [in]
Pointer to the system-supplied PI8042_SYNCH_WRITE_PORT callback that writes to the port.
TurnTranslationOn [out]
Specifies, if TRUE, to turn translation on. Otherwise, translation is turned off.
Return value
KbFilter_InitializationRoutine returns an appropriate NTSTATUS code.
*/
NTSTATUS KbFilter_InitializationRoutine(
In PDEVICE_OBJECT DeviceObject,
In PVOID SynchFuncContext,
In PI8042_SYNCH_READ_PORT ReadPort,
In PI8042_SYNCH_WRITE_PORT WritePort,
Out PBOOLEAN TurnTranslationOn
);
KbFilter_IsrHook
Lihat PI8042_KEYBOARD_ISR. Panggilan balik ini tidak diperlukan jika operasi default I8042prt sudah cukup.
ISR keyboard I8042prt memanggil KbFilter_IsrHook setelah memvalidasi gangguan dan membaca kode pemindaian.
KbFilter_IsrHook berjalan dalam mode kernel di IRQL keyboard I8042prt.
/*
Parameters
DeviceObject [in]
Pointer to the filter device object of the driver that supplies this callback.
CurrentInput [in]
Pointer to the input KEYBOARD_INPUT_DATA structure that is being constructed by the ISR.
CurrentOutput [in]
Pointer to an OUTPUT_PACKET structure that specifies the bytes that are being written to the hardware device.
StatusByte [in, out]
Specifies the status byte that is read from I/O port 60 when an interrupt occurs.
DataByte [in]
Specifies the data byte that is read from I/O port 64 when an interrupt occurs.
ContinueProcessing [out]
Specifies, if TRUE, to continue processing in the I8042prt keyboard ISR after this callback returns; otherwise, processing is not continued.
ScanState [in]
Pointer to a KEYBOARD_SCAN_STATE structure that specifies the keyboard scan state.
Return value
KbFilter_IsrHook returns TRUE if the interrupt service routine should continue; otherwise it returns FALSE.
*/
KbFilter_IsrHook KbFilter_IsrHook(
In PDEVICE_OBJECT DeviceObject,
In PKEYBOARD_INPUT_DATA CurrentInput,
In POUTPUT_PACKET CurrentOutput,
Inout UCHAR StatusByte,
In PUCHAR DataByte,
Out PBOOLEAN ContinueProcessing,
In PKEYBOARD_SCAN_STATE ScanState
);
KbFilter_ServiceCallback
Lihat PSERVICE_CALLBACK_ROUTINE.
Rutinitas penyelesaian pengiriman ISR dari driver fungsi memanggil KbFilter_ServiceCallback, yang kemudian memanggil implementasi driver kelas keyboard PSERVICE_CALLBACK_ROUTINE. Vendor dapat menerapkan panggilan balik layanan filter untuk memodifikasi data input yang ditransfer dari buffer input perangkat ke antrean data kelas. Misalnya, panggilan balik dapat menghapus, mengubah, atau menyisipkan data.
/*
Parameters
DeviceObject [in]
Pointer to the class device object.
InputDataStart [in]
Pointer to the first keyboard input data packet in the input data buffer of the port device.
InputDataEnd [in]
Pointer to the keyboard input data packet that immediately follows the last data packet in the input data buffer of the port device.
InputDataConsumed [in, out]
Pointer to the number of keyboard input data packets that are transferred by the routine.
Return value
None
*/
VOID KbFilter_ServiceCallback(
In PDEVICE_OBJECT DeviceObject,
In PKEYBOARD_INPUT_DATA InputDataStart,
In PKEYBOARD_INPUT_DATA InputDataEnd,
Inout PULONG InputDataConsumed
);
Sampel Moufiltr
Moufiltr digunakan dengan Mouclass, driver kelas sistem untuk perangkat mouse yang digunakan dengan Windows 2000 dan versi yang lebih baru, dan I8042prt, driver fungsi untuk mouse gaya PS/2 yang digunakan dengan Windows 2000 dan yang lebih baru. Moufiltr menunjukkan cara memfilter permintaan I/O dan menambahkan rutinitas panggilan balik yang memodifikasi pengoperasian Mouclass dan I8042prt.
Untuk informasi selengkapnya tentang operasi Moufiltr, lihat sumber daya berikut:
File header WDK ntddmou.h .
Sampel kode sumber Moufiltr .
Kode kontrol IO Moufiltr
IOCTL berikut digunakan oleh Moufiltr.
IOCTL_INTERNAL_I8042_HOOK_MOUSE
Permintaan IOCTL_INTERNAL_I8042_HOOK_MOUSE menambahkan rutinitas panggilan balik ISR ke ISR mouse I8042prt. Panggilan balik ISR bersifat opsional dan disediakan oleh driver filter mouse tingkat atas.
I8042prt mengirimkan permintaan ini setelah menerima permintaan IOCTL_INTERNAL_MOUSE_CONNECT . I8042prt mengirimkan permintaan IOCTL_INTERNAL_I8042_HOOK_MOUSE sinkron ke bagian atas tumpukan perangkat mouse.
Setelah Moufiltr menerima permintaan mouse kait, Moufiltr memfilter permintaan dengan cara berikut:
- Menyimpan informasi tingkat atas yang diteruskan ke Moufiltr, yang mencakup konteks objek perangkat tingkat atas dan penunjuk ke panggilan balik ISR.
- Mengganti informasi tingkat atas dengan informasinya sendiri.
- Menyimpan konteks I8042prt dan pointer ke panggilan balik yang dapat digunakan oleh panggilan balik ISR Moufiltr.
IOCTL_INTERNAL_MOUSE_CONNECT
Permintaan IOCTL_INTERNAL_MOUSE_CONNECT menghubungkan layanan Mouclass ke perangkat mouse.
IOCTL_INTERNAL_MOUSE_DISCONNECT
Moufiltr menyelesaikan permintaan IOCTL_INTERNAL_MOUSE_DISCONNECT dengan status kesalahan STATUS_NOT_IMPLEMENTED.
Untuk semua permintaan lainnya, Moufiltr melewati tumpukan IRP saat ini dan mengirim permintaan ke tumpukan perangkat tanpa pemrosesan lebih lanjut.
Rutinitas Panggilan Balik Moufiltr
MouFiltr menerapkan rutinitas panggilan balik berikut.
MouFilter_IsrHook
Lihat PI8042_MOUSE_ISR.
/*
Parameters
DeviceObject
Pointer to the filter device object of the driver that supplies this callback.
CurrentInput
Pointer to the input MOUSE_INPUT_DATA structure being constructed by the ISR.
CurrentOutput
Pointer to the OUTPUT_PACKET structure that specifies the bytes being written to the hardware device.
StatusByte
Specifies a status byte that is read from I/O port 60 when the interrupt occurs.
DataByte
Specifies a data byte that is read from I/O port 64 when the interrupt occurs.
ContinueProcessing
Specifies, if TRUE, that the I8042prt mouse ISR continues processing after this callback returns. Otherwise, processing is not continued.
MouseState
Pointer to a MOUSE_STATE enumeration value, which identifies the state of mouse input.
ResetSubState
Pointer to MOUSE_RESET_SUBSTATE enumeration value, which identifies the mouse reset substate. See the Remarks section.
Return value
MouFilter_IsrHook returns TRUE if the interrupt service routine should continue; otherwise it returns FALSE.
*/
BOOLEAN MouFilter_IsrHook(
PDEVICE_OBJECT DeviceObject,
PMOUSE_INPUT_DATA CurrentInput,
POUTPUT_PACKET CurrentOutput,
UCHAR StatusByte,
PUCHAR DataByte,
PBOOLEAN ContinueProcessing,
PMOUSE_STATE MouseState,
PMOUSE_RESET_SUBSTATE ResetSubState
);
Panggilan balik MouFilter_IsrHook tidak diperlukan jika operasi default I8042prt sudah cukup.
ISR mouse I8042prt memanggil MouFilter_IsrHook setelah memvalidasi gangguan.
Untuk mengatur ulang mouse, I8042prt melewati urutan substatus operasional. Nilai enumerasi MOUSE_RESET_SUBSTATE mengidentifikasi setiap substat. Untuk informasi selengkapnya tentang bagaimana I8042prt mengatur ulang mouse dan substates reset mouse yang sesuai, lihat dokumentasi MOUSE_RESET_SUBSTATE di ntdd8042.h.
MouFilter_IsrHook berjalan dalam mode kernel di IRQL ISR mouse I8042prt.
MouFilter_ServiceCallback
Lihat PSERVICE_CALLBACK_ROUTINE
/*
Parameters
DeviceObject [in]
Pointer to the class device object.
InputDataStart [in]
Pointer to the first mouse input data packet in the input data buffer of the port device.
InputDataEnd [in]
Pointer to the mouse input data packet immediately following the last data packet in the port device's input data buffer.
InputDataConsumed [in, out]
Pointer to the number of mouse input data packets that are transferred by the routine.
Return value
None
*/
VOID MouFilter_ServiceCallback(
_In_ PDEVICE_OBJECT DeviceObject,
_In_ PMOUSE_INPUT_DATA InputDataStart,
_In_ PMOUSE_INPUT_DATA InputDataEnd,
_Inout_ PULONG InputDataConsumed
);
ISR DPC dari I8042prt memanggil MouFilter_ServiceCallback, yang kemudian memanggil MouseClassServiceCallback. Panggilan balik layanan filter dapat dikonfigurasi untuk memodifikasi data input yang ditransfer dari buffer input perangkat ke antrean data kelas. Misalnya, panggilan balik dapat menghapus, mengubah, atau menyisipkan data.