Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez a cikk azoknak a fejlesztőknek szól, akik illesztőprogramokat hoznak létre a billentyűzet- és egér-HID-ügyfelek számára. Ha egeret vagy billentyűzetet szeretne kijavítani, tekintse meg a következőt:
Ez a cikk a billentyűzet- és egér HID-ügyfélillesztőket ismerteti. A billentyűzetek és az egerek a HID-használati táblákban szabványosított és Windows operációs rendszerekben implementált HID-ügyfelek első készletét képviselik.
A billentyűzet- és egér HID-ügyfélillesztők HID-leképező illesztőprogramok formájában implementálhatók. A HID-leképező illesztőprogram egy kernel módú szűrőillesztő, amely kétirányú felületet biztosít a nem HID-osztályillesztő és a HID-osztályillesztő közötti I/O-kérelmekhez. A leképező illesztőprogram leképezi az I/O-kéréseket és adatprotokollokat egyik rendszerről a másikra.
A Windows rendszer által biztosított HID mapper illesztőprogramokat biztosít a HID-billentyűzethez és a HID-egéreszközökhöz.
Architektúra és áttekintés
Az alábbi ábra az USB-billentyűzetek, egér- és érintőpad-eszközök rendszer által biztosított illesztőprogram-vermeit mutatja be.
Az ábrán a következő összetevők láthatók:
- KBDHID.sys: HID térképező illesztőprogram billentyűzetekhez. A HID-használatokat szkennelési kódokká alakítja át a meglévő billentyűzet-osztályillesztővel való illesztés érdekében.
- MOUHID.sys: HID ügyféltérképző illesztőprogram egerekhez/érintőpárnákhoz. A HID-használatokat (X/Y, gombok, görgő) egérparancsokká alakítja át, hogy a meglévő billentyűzetes osztályú illesztőprogrammal működjön együtt.
- KBDCLASS.sys: A billentyűzetosztály-illesztőprogram biztonságos módon biztosítja a rendszer összes billentyűzetének és billentyűpadjának funkcióit.
- MOUCLASS.sys: Az egérosztály-illesztő a rendszeren lévő összes egér és érintőpárnához biztosít funkciókat. Az illesztőprogram támogatja az abszolút és a relatív mutatóeszközöket is. MOUCLASS.sys nem az érintőképernyők Windows-illesztőprogramja.
- HIDCLASS.sys: A HID osztályillesztő. A HID osztálymeghajtó köti össze az KBDHID.sys és MOUHID.sys HID-ügyfeleket a különféle szállítóeszközökkel, például az USB-vel, a Bluetooth-szal stb.
A rendszer a következőképpen hozza létre az illesztőprogram-vermet:
- Az átviteli verem létrehoz egy fizikai eszközobjektumot (OEM) minden csatlakoztatott HID-eszközhöz, és betölti a megfelelő HID-átviteli illesztőprogramot, amely viszont betölti a HID-osztályillesztőt.
- A HID osztályillesztő minden billentyűzet vagy egér felső szintű gyűjteményhez (TLC) létrehoz egy PDO-t. Az összetett HID-eszközök (amelyek több TLC-vel rendelkeznek) úgy jelennek meg, mint több PDO, amelyeket a HID osztályillesztő hoz létre. Egy integrált egérrel rendelkező billentyűzet például egy gyűjteményt tartalmazhat a szabványos billentyűzetvezérlőkhöz, és egy másik gyűjteményt az egérhez.
- A billentyűzet vagy egér HID ügyfélleképező illesztőprogramjai a megfelelő funkcionális eszközobjektumon (FDO) töltődnek be.
- A HID mapper illesztőprogramok FDO-kat hoznak létre a billentyűzethez és az egérhez, majd betöltik a klassz-illesztőprogramokat.
Fontos megjegyzések
- A támogatott HID-használatoknak és legfelső szintű gyűjteményeknek megfelelő billentyűzetekhez és egerekhez nincs szükség szállítói illesztőprogramokra.
- A szállítók opcionálisan szűrőillesztőket biztosítanak a HID-veremben ezeknek az adott TLC-nek a működésének módosításához/továbbfejlesztéséhez.
- A szállítóknak külön, szállítóspecifikus TLC-ket kell létrehozniuk, amelyek védett adatokat cserélnek a HID-ügyfél és az eszköz között. Ne használjon szűrőillesztőket, kivéve, ha kritikus fontosságú.
- A rendszer az összes billentyűzet- és egérgyűjteményt megnyitja kizárólagos használatra.
- A rendszer megakadályozza a billentyűzet letiltását/engedélyezését.
- A rendszer támogatja a vízszintes/függőleges kerekeket sima görgetési képességekkel.
Vezetői útmutatás
A Microsoft a következő útmutatást nyújt a független hardvergyártóknak (IHV-knek) az illesztőprogramok írásához:
Az illesztőprogram-fejlesztők további illesztőprogramokat adhatnak hozzá szűrőillesztő vagy új HID-ügyfélillesztő formájában.
Az illesztőprogram-fejlesztőknek gondoskodniuk kell arról, hogy az általuk fejlesztett értéket hozzáadó illesztőprogram szűrőillesztő program legyen, és ne cserélje le, vagy ne használja a meglévő Windows HID-illesztőprogramokat a bemeneti folyamatban.
- A szűrőillesztők az alábbi esetekben engedélyezettek:
- A kbdhid/mouhid felső szűrőjeként
- A kbdclass/mouclass felső szűrőjeként
- A szűrőillesztők nem ajánlottak a HIDCLASS és a HID átviteli minidriverok közötti szűrőként.
- A szűrőillesztők az alábbi esetekben engedélyezettek:
Függvényillesztők: Másik lehetőségként a szállítók létrehozhatnak egy függvényillesztőt (szűrőillesztő helyett), de csak a szállítók által meghatározott HID-tartományvezérlőkhöz (szükség esetén felhasználói módú szolgáltatással).
A függvényillesztők az alábbi esetekben engedélyezettek:
- Csak az adott gyártó hardverére történő betöltés
Szállító vezetők: A Windows csapata nem javasolja további HID miniatűr illesztőprogramok létrehozását, mivel ezek megírása és karbantartása összetett feladat. Ha egy partner létrehoz egy új HID átviteli minidrivert, különösen SoC rendszereken, javasoljuk, hogy részletes architekturális áttekintést adjon az érvelés megértéséhez, és győződjön meg arról, hogy az illesztőprogram megfelelően van fejlesztve.
Az illesztőprogram-fejlesztőknek illesztőprogram-keretrendszereket (KMDF vagy UMDF) kell használniuk, és nem kell WDM-re támaszkodniuk a szűrőillesztőkhöz.
Az illesztőprogram-fejlesztőknek csökkenteniük kell a kernelfelhasználók közötti átmenetek számát a szolgáltatás és az illesztőprogram-verem között.
Az illesztőprogram-fejlesztőknek biztosítaniuk kell, hogy a rendszer a billentyűzet és az érintőpárna funkcióval is felébreszthető legyen (a végfelhasználó (eszközkezelő) vagy a számítógép gyártója által állítható. A SoC-rendszereken emellett ezeknek az eszközöknek képesnek kell lenniük arra, hogy alacsonyabb teljesítményű állapotból ébredjenek fel, miközben a rendszer működő S0 állapotban van.
Az illesztőprogram-fejlesztőknek gondoskodniuk kell arról, hogy a hardverek hatékonyan felügyelve legyenek.
- Az eszköz a legalacsonyabb energiaállapotba léphet, ha az eszköz tétlen.
- Az eszköz a legalacsonyabb energiaállapotban van, ha a rendszer alacsony energiaállapotú (például készenléti (S3) vagy csatlakoztatott készenléti állapotban van.
Billentyűzetkiosztás
A billentyűzetkiosztás teljes mértékben leírja a Microsoft Windows 2000 és újabb verziók billentyűzetének beviteli jellemzőit. A billentyűzetkiosztás például meghatározza a nyelvet, a billentyűzet típusát és verzióját, a módosítókat, a vizsgálati kódokat stb.
A billentyűzetkiosztásokkal kapcsolatos információkért tekintse meg ezeket az erőforrásokat:
- A billentyűzetfejlécfájl (kdb.h) a Windows Driver Development Kitben (DDK), amely a billentyűzetkiosztásokkal kapcsolatos általános információkat tartalmazza.
- Minta billentyűzetkiosztások.
Egy adott billentyűzet elrendezésének megjelenítéséhez tekintse meg a Windows billentyűzetkiosztásait.
A billentyűzetkiosztásról további információt a Vezérlőpult\Óra, Nyelv és Régió\Nyelv című témakörben talál.
Támogatott gombok és kerekek egereken
Ez a lista a Windows által támogatott egérfunkciókat azonosítja:
- Gombok 1-5
- Függőleges görgetőkerék
- Vízszintes görgetőkerék
- Sima görgetőkerék-támogatás (vízszintes és függőleges)
A PS/2 egereken a 4-es és 5-ös gombok valamint a kerék aktiválása
A Windows által az új négy- és ötgombos és kerékmód aktiválására használt módszer a harmadik gomb és a kerék aktiválására használt módszer kiterjesztése az IntelliMouse-kompatibilis egerekben:
Az egér a háromgombos kerék üzemmódra van állítva, ha a jelentés sebességét másodpercenként 200 jelentésre, majd másodpercenként 100 jelentésre, majd másodpercenként 80 jelentésre állítja. Ezután olvassa be az azonosítót az egérről. A sorozat befejezésekor az egérnek egy 3-as azonosítót kell jelentenie.
Az egér az ötgombos kerék üzemmódra van állítva azzal, hogy a jelentési sebességet másodpercenként 200 jelentésre állítjuk, majd ismét 200 jelentésre, ezt követően pedig másodpercenként 80 jelentésre. Ezután olvassa be az azonosítót az egérről. A sorozat befejezése után az ötgombos egérnek 4 azonosítót kell jelentenie (míg az IntelliMouse-kompatibilis háromgombos egér továbbra is 3 azonosítót jelent).
Ez a módszer csak PS/2 egerekre alkalmazható, hid egerekre nem. A HID-egereknek pontos használati adatokat kell jelenteniük a jelentésleírójukban.
Szabványos PS/2-kompatibilis egér adatcsomag formátuma (két gomb)
Bájt | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Megjegyzés |
---|---|---|---|---|---|---|---|---|---|
1 | Yover | Xover | Ysign | Xsign | Címke | M | R | L | X/Y túlcsordulás és jelölések, gombok |
2 | X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | X bájt adat |
3 | Y7 | Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 | Y adatbájt |
Megjegyzés:
A Windows-egérillesztők nem ellenőrzik a túlcsordulási biteket. Túlcsordulás esetén az egérnek a maximálisan aláírt elmozdulási értéket kell elküldenie.
Standard PS/2-kompatibilis egér adatcsomag formátuma (három gomb + függőleges kerék)
Bájt | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Megjegyzés |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | Ysign | Xsign | 1 | M | R | L | X/Y jelek és R/L/M gombok |
2 | X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | X adatbájt |
3 | Y7 | Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 | Y adatbájt |
4 | Z7 | Z6 | Z5 | Z4 | Z3 | Z2 | Z1 | Z0 | Z/kerék adatbájt |
Szabványos PS/2-kompatibilis egér adatcsomag formátuma (öt gomb + függőleges kerék)
Bájt | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Megjegyzés |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | Ysign | Xsign | 1 | M | R | L | X/Y jelek és R/L/M gombok |
2 | X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | X bájt adat |
3 | Y7 | Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 | Y adatbájt |
4 | 0 | 0 | B5 | B4 | Z3 | Z2 | Z1 | Z0 | Z/kerék adatok és gombok 4 és 5 |
Fontos
Az ötgombos egér Z/wheel adatai négy bitre csökkennek az IntelliMouse-kompatibilis háromgombos módban használt nyolc bit helyett. Ezt a csökkentést az teszi lehetővé, hogy a kerék általában nem tud a +7/-8 tartományon túli értékeket generálni egy adott megszakítási időszakban. A Windows egérillesztők kiterjesztik a négy Z/kerék adatbit jelét, amikor az egér ötgombos kerék módban van. Aláírják a teljes Z/wheel adat bájtot, amikor az egér háromgombos kerék módban működik.
A 4-es és 5-ös gombok a WM_APPCOMMAND üzenetekhez vannak leképezve, és megfelelnek App_Back és App_Forward.
Szállítói illesztőprogramokat nem igénylő eszközök
A szállítói illesztőprogramok nem szükségesek a következő eszközökhöz:
- A HID Standardnak megfelelő eszközök.
- A rendszer által biztosított nem HIDClass illesztőprogramok által üzemeltetett billentyűzet-, egér- vagy játékporteszközök.
Kbfiltr-minta
A Kbfiltr a Kbdclass-szal, a billentyűzeteszközök rendszerosztály-illesztőprogramjával, és az I8042prt-vel, a PS/2 stílusú billentyűzet függvényillesztőjével együtt használatos. A Kbfiltr bemutatja, hogyan szűrheti az I/O-kérelmeket, és hogyan adhat hozzá visszahívási rutinokat, amelyek módosítják a Kbdclass és az I8042prt működését.
A Kbfiltr művelettel kapcsolatos további információkért lásd:
Az ntddkbd.h WDK fejlécfájlja.
A Kbfiltr-minta forráskódja.
Kbfiltr IO-vezérlőkódok
A Kbfiltr a következő IOCTLs-eket használja.
IOCTL_INTERNAL_I8042_HOOK_KEYBOARD
A IOCTL_INTERNAL_I8042_HOOK_KEYBOARD kérés:
- Inicializálási visszahívási rutint ad hozzá az I8042prt billentyűzet inicializálási rutinhoz.
- IsR-visszahívási rutint ad hozzá az I8042prt billentyűzet ISR-hez.
Az inicializálás és az ISR-visszahívások nem kötelezőek, és egy felső szintű szűrőillesztő biztosítja a PS/2-stílusú billentyűzeteszközökhöz.
Miután az I8042prt IOCTL_INTERNAL_KEYBOARD_CONNECT kérést kap, szinkron IOCTL_INTERNAL_I8042_HOOK_KEYBOARD kérést küld a billentyűzet eszközverem tetejére.
Miután a Kbfiltr megkapta a horogbillentyűzet-kérést, a Kbfiltr a következő módon szűri a kérést:
- Menti a Kbfiltrnek átadott felső szintű információkat, beleértve egy felső szintű eszközobjektum környezetét, egy inicializálási visszahívásra mutató mutatót és egy ISR-visszahívásra mutató mutatót.
- A felső szintű információkat a sajátjára cseréli.
- Menti az I8042prt környezetét és a mutatókat a Kbfiltr ISR-visszahívás által használható visszahívásokhoz.
IOCTL_INTERNAL_KEYBOARD_CONNECT
A IOCTL_INTERNAL_KEYBOARD_CONNECT kérés csatlakoztatja a Kbdclass szolgáltatást a billentyűzeteszközhöz. A Kbdclass elküldi ezt a kérést a billentyűzeteszköz-halmazra, mielőtt megnyitná a billentyűzeteszközt.
Miután a Kbfiltr megkapta a billentyűzetcsatlakozás kérését, a Kbfiltr a következő módon szűri a csatlakozási kérést:
- Menti a Kbdclass CONNECT_DATA (Kbdclass) struktúrájának másolatát, amelyet a Kbdclass átad a szűrőillesztőnek.
- Saját csatlakozási információkat ad meg az osztályillesztő csatlakoztatási információi helyett.
- Továbbítja a IOCTL_INTERNAL_KEYBOARD_CONNECT kérést az eszközhierarchiában.
Ha a kérés nem sikerül, a Kbfiltr megfelelő hibaállapottal fejezi be a kérést.
A Kbfiltr egy sablont biztosít egy szűrőszolgáltatás visszahívási rutinhoz, amely kiegészítheti a KeyboardClassServiceCallback, a Kbdclass osztály szolgáltatás visszahívási rutinjának működését. A szűrőszolgáltatás visszahívása szűrheti az eszköz bemeneti pufferéből az osztályadat-üzenetsorba továbbított bemeneti adatokat.
IOCTL_INTERNAL_KEYBOARD_DISCONNECT
A IOCTL_INTERNAL_KEYBOARD_DISCONNECT kérés STATUS_NOT_IMPLEMENTED állapottal fejeződik be. A Plug and Play kezelője hozzáadhat vagy eltávolíthat Egy Plug and Play billentyűzetet.
Minden más eszközvezérlési kérés esetén a Kbfiltr kihagyja az aktuális IRP-vermet, és további feldolgozás nélkül elküldi a kérést az eszköz verembe.
A Kbfiltr által implementált visszahívási rutinok
A Kbfiltr a következő visszahívási rutinokat valósítja meg.
KbFilter_InitializationRoutine
Lásd : PI8042_KEYBOARD_INITIALIZATION_ROUTINE
A KbFilter_InitializationRoutine nem szükséges, ha a billentyűzet I8042prt alapértelmezett inicializálása elegendő.
Az I8042prt meghívja KbFilter_InitializationRoutine , amikor inicializálja a billentyűzetet. Az alapértelmezett billentyűzet inicializálása a következő műveleteket tartalmazza:
- a billentyűzet alaphelyzetbe állítása
- típusos sebesség és késleltetés beállítása
- a fénykibocsátó diódák (LED) beállítása
/*
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
Lásd PI8042_KEYBOARD_ISR. Ez a visszahívás nem szükséges, ha az I8042prt alapértelmezett művelete elegendő.
Az I8042prt billentyűzet ISR hívja a KbFilter_IsrHook, miután ellenőrzi a megszakítást, és beolvassa a vizsgálati kódot.
KbFilter_IsrHook kernel módban fut az I8042prt billentyűzet IRQL-jén.
/*
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
Lásd : PSERVICE_CALLBACK_ROUTINE.
A függvényillesztő ISR-küldésének befejező rutinja meghívja a KbFilter_ServiceCallback-t, amely ezután meghívja a billentyűzetosztály-illesztőprogram PSERVICE_CALLBACK_ROUTINE megvalósítását. A szállítók szűrőszolgáltatás-visszahívást implementálhatnak az eszköz bemeneti pufferéből az osztályadat-üzenetsorba átvitt bemeneti adatok módosításához. A visszahívás például törölheti, átalakíthatja vagy beszúrhatja az adatokat.
/*
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
);
Moufiltr-minta
A Moufiltr az egéreszközök rendszerosztály-illesztőprogramja, a Mouclass használatával működik. Az I8042prttel, a PS/2 stílusú egér függvényillesztőjével is működik. Mindkét illesztőprogramot a Windows 2000 és újabb verziók használják. A Moufiltr bemutatja, hogyan szűrheti az I/O-kéréseket, és hogyan adhat hozzá visszahívási rutinokat, amelyek módosítják a Mouclass és az I8042prt működését.
A Moufiltr művelettel kapcsolatos további információkért tekintse meg az alábbi erőforrásokat:
Moufiltr IO-vezérlőkódok
A Moufiltr a következő IOCTL-eket használja.
IOCTL_INTERNAL_I8042_HOOK_MOUSE
A IOCTL_INTERNAL_I8042_HOOK_MOUSE kérés hozzáad egy ISR-visszahívási rutint az I8042prt egér ISR-hez. Az ISR-visszahívás nem kötelező, és egy felső szintű egérszűrő-illesztő biztosítja.
Az I8042prt azt követően küldi el ezt a kérést, hogy IOCTL_INTERNAL_MOUSE_CONNECT kérést kap. Az I8042prt szinkron IOCTL_INTERNAL_I8042_HOOK_MOUSE kérést küld az egér eszközhalmaz tetejére.
Miután a Moufiltr megkapja a horog egérkérelmet, a kérést a következő módon szűri:
- Menti a Moufiltrnek átadott felső szintű információkat, beleértve egy felső szintű eszközobjektum környezetét és egy ISR-visszahívásra mutató mutatót.
- A felső szintű információkat a sajátjára cseréli.
- Menti az I8042prt környezetét, és a visszahívásokra mutató mutatókat, amelyeket a Moufiltr ISR-visszahívások használhatnak.
IOCTL_INTERNAL_MOUSE_CONNECT
A IOCTL_INTERNAL_MOUSE_CONNECT kérés összekapcsolja a Mouclass szolgáltatást egy egéreszközhöz.
IOCTL_INTERNAL_MOUSE_DISCONNECT
A Moufiltr a IOCTL_INTERNAL_MOUSE_DISCONNECT kérést STATUS_NOT_IMPLEMENTED hibaállapottal fejezi be.
Az összes többi kérés esetében a Moufiltr további feldolgozás nélkül kihagyja az aktuális IRP-vermet, és elküldi a kérést az eszköz veremére.
Moufiltr-visszahívási rutinok
A MouFiltr a következő visszahívási rutinokat valósítja meg.
MouFilter_IsrHook
Lásd 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
);
Nincs szükség MouFilter_IsrHook visszahívásra, ha az I8042prt alapértelmezett művelete elegendő.
Az I8042prt egér ISR meghívja a MouFilter_IsrHook-ot, miután érvényesítette a megszakítást.
Az egér alaphelyzetbe állításához az I8042prt műveleti alállapotok sorozatán megy keresztül. A MOUSE_RESET_SUBSTATE enumerálási érték azonosítja az egyes alállapotokat. További információt arról, hogy az I8042prt hogyan állítja vissza az egeret és az ehhez kapcsolódó visszaállítási alállapotokat, az ntdd8042.h-ban található MOUSE_RESET_SUBSTATE dokumentációban talál.
MouFilter_IsrHook kernel módban fut az I8042prt egér ISR IRQL-jén.
MouFilter_ServiceCallback
Lásd : 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
);
Az I8042prt ISR DPC-je meghívja a MouFilter_ServiceCallbackot, ami aztán hívja a MouseClassServiceCallbackot. A szűrőszolgáltatás visszahívása konfigurálható úgy, hogy módosítsa az eszköz bemeneti pufferéből az osztályadat-üzenetsorba átvitt bemeneti adatokat. A visszahívás például törölheti, átalakíthatja vagy beszúrhatja az adatokat.