2017-04-07 4 views
-1

키보드 ISR을 연결하려고하지만 CreateFile0000007Bh 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 
+0

처럼 뭔가를 할 수 있습니다. 'filename2 '에'\\\\. \\ keyboard'을 시도해 보셨습니까? –

+0

작동하지 않습니다. 내 어셈블러는 그런 식으로 백 슬래시를 해석하지 않습니다. –

+1

키보드 ISR을 연결할 수있는 장치를 열 수 없습니다. 간단히 말해서 사용자 모드 프로세스가 아니라 드라이버에서 필요로하는 것입니다. 그러나 드라이버를 사용하더라도 현대 버전의 Windows에서 커널 패치 보호를 통해 ISR 후크가 방지됩니다. 드라이버에서 I8042prt 필터를 대신 사용할 수는 있지만 USB 키보드 (자체 키보드 IRQ가없는)는 작동하지 않습니다. https://msdn.microsoft.com/en-us/windows/hardware/drivers/hid/3rd-party-filter-drivers –

답변

0

이 평면 어셈블러 구문은, 당신은 슬래시를 다시 탈출하지 않고 devicename을 통과해야합니다 또한 Windows에서 키보드 장치에 액세스하는 방법에 대한 좋은 tutorial with source code in C있다

devicename  db '\Device\KeyboardClass0',0 

. 재미있을 수도 있습니다. 조립에 번역

, 당신은 이스케이프 문자로 백 슬래시 해석됩니다 어셈블러 devicename` 문자열 '의 형식을 바탕으로

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 ? 
+0

답장을 보내 주셔서 감사합니다. 문제가 해결되었지만 지금 CreateFile은 키보드 장치를 열려고 시도 할 때 ERROR_ACCES_DENIED입니다. 왜 일어날까요 ??? –

+0

아마 Windows 보안 정책 때문입니다. 어쩌면 당신은 관리자 또는 뭔가로 실행해야합니다 –

+0

나는 이미 관리자로 실행됩니다. 나는 \ Device \ KeyboardClass0가 키보드 장치에 올바른 핸들이 아니라고 생각한다. 내가 키보드 ISR을 후킹하는 장치에 올바른 핸들은 무엇입니까 ??? –