如何获取键盘设备的句柄?
How to obtain the handle to keyboard device?
我正在尝试挂接键盘 ISR,但我无法打开设备,因为
CreateFile
returns 0000007Bh ERROR_INVALID_NAME
。我做错了什么?
invoke DefineDosDevice,[raw],filename1,devicename
lea rcx,[filename2]
invoke CreateFileA,rcx,GENERIC_ALL,FILE_SHARE_WRITE or
FILE_SHARE_READ,0,3,0,0
ret
section '.data' data writeable readable
devicename db '\Device\KeyboardClass0',0
filename1 db 'keyboard',0
filename2 db '\.\keyboard',0
raw dq 1
这是平面汇编语法,你应该传递 devicename
而不要转义反斜杠:
devicename db '\Device\KeyboardClass0',0
在 Windows 中也有关于如何访问键盘设备的很好的 tutorial with source code in C。您可能会发现它很有趣。
将它翻译成程序集,你会想做类似的事情
include 'include\win64ax.inc'
.code
start:
invoke DefineDosDevice, 1, kbdFileName, kbdDeviceName
mov rcx, kbdPath
invoke CreateFile, rcx, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0
mov [hKbd], rax
;. . .
invoke ExitProcess, 0
.end start
.data
kbdDeviceName db '\Device\KeyboardClass0',0
kbdFileName db 'kbd',0
kbdPath db '\.\kbd',0
hKbd dq ?
我正在尝试挂接键盘 ISR,但我无法打开设备,因为
CreateFile
returns 0000007Bh ERROR_INVALID_NAME
。我做错了什么?
invoke DefineDosDevice,[raw],filename1,devicename
lea rcx,[filename2]
invoke CreateFileA,rcx,GENERIC_ALL,FILE_SHARE_WRITE or
FILE_SHARE_READ,0,3,0,0
ret
section '.data' data writeable readable
devicename db '\Device\KeyboardClass0',0
filename1 db 'keyboard',0
filename2 db '\.\keyboard',0
raw dq 1
这是平面汇编语法,你应该传递 devicename
而不要转义反斜杠:
devicename db '\Device\KeyboardClass0',0
在 Windows 中也有关于如何访问键盘设备的很好的 tutorial with source code in C。您可能会发现它很有趣。
将它翻译成程序集,你会想做类似的事情
include 'include\win64ax.inc'
.code
start:
invoke DefineDosDevice, 1, kbdFileName, kbdDeviceName
mov rcx, kbdPath
invoke CreateFile, rcx, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0
mov [hKbd], rax
;. . .
invoke ExitProcess, 0
.end start
.data
kbdDeviceName db '\Device\KeyboardClass0',0
kbdFileName db 'kbd',0
kbdPath db '\.\kbd',0
hKbd dq ?