montering - Sådan tilslutter du tastaturet ISR?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at koble tastatur ISR med min kode nedenfor, men jeg kan ikke, fordi DeviceIoControl API returnerer ERROR\_INVALID\_FUNCTION. Her er min kode:


invoke DefineDosDevice,[raw],filename1,devicename
    lea     rcx,[filename2]
    invoke  CreateFileA,rcx,GENERIC\_WRITE,0,0,OPEN\_EXISTING,0,0
    MOV [HI8042KBDHOOKISR],RAX
    MOV RAX,0
    MOV RCX,sizeof.\_INTERNAL\_I8042\_START\_INFORMATION
    LEA RDI,[INTERNAL\_I8042\_START\_INFORMATION]
    REP STOSB
    MOV RCX,sizeof.\_INTERNAL\_I8042\_START\_INFORMATION
    MOV [INTERNAL\_I8042\_START\_INFORMATION.Size1],RCX
    invoke DeviceIoControl,[HI8042KBDHOOKISR],[Intel8042],INTERNAL\_I8042\_START\_INFORMATION,sizeof.\_INTERNAL\_I8042\_START\_INFORMATION,INTERNAL\_I8042\_START\_INFORMATION,sizeof.\_INTERNAL\_I8042\_START\_INFORMATION,NIL,0
    LEA RBX,[MYKBDISR]
    MOV [INTERNAL\_I8042\_START\_INFORMATION.InterruptObject],RBX
    RET
MYKBDISR:
CALL GET\_SCANCODE
...

section '.data' data writeable readable

devicename       db 'DeviceKeyboardClass0',0
filename1        db 'keyboard',0
filename2        db '\.keyboard',0
filename3        db '\.Keybd',0
raw              dq 1
HI8042KBDHOOKISR dq 0
NIL              dq 0
Intel8042        dq 0B3FCFh


Se koden og svar mig: Hvor har jeg fejl i koden ovenfor? Hvorfor DeviceIoControl returnerer ERROR\_INVALID\_FUNCTION?

Bedste reference


IOCTL\_INTERNAL\_I8042\_KEYBOARD\_START\_INFORMATION Dette er intern enhedens io kontrolkode (IRP\_MJ\_INTERNAL\_DEVICE\_CONTROL). Denne form for kontrol kan ikke sendes af DeviceIoControl (den sender kun IRP\_MJ\_DEVICE\_CONTROL) og overhovedet fra brugertilstand. og afbrydelse kan heller ikke håndteres i brugertilstand. også du læser dette: [6]



  I8042prt sender denne anmodning synkront til toppen af ​​enheden
  Stak efter at tastaturets afbrydelsesobjekt er oprettet.



så - ikke du skal sende denne anmodning, men vis omvendt - du skal være filterdriver, der er knyttet til tastaturenheden. og håndter denne anmodning