-1
我想用下面的代碼鉤住鍵盤ISR,但我不能,因爲DeviceIoControl API返回ERROR_INVALID_FUNCTION。這裏是我的代碼:如何掛鉤windows鍵盤ISR?
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 '\Device\KeyboardClass0',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
看到代碼並回答我:在上面的代碼中我錯了?爲什麼DeviceIoControl返回ERROR_INVALID_FUNCTION?