2017-04-07 2 views
-1

Je suis en train d'accrocher le clavier ISR, mais je ne peux pas ouvrir l'appareil parce que CreateFile renvoie 0000007Bh ERROR_INVALID_NAME. Qu'ai-je mal fait?Comment obtenir la poignée du clavier?

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

Basé sur le format de la chaîne 'devicename' votre assembleur interprète les antislashs comme caractères d'échappement. Avez-vous essayé '\\\\. \\ keyboard' pour' filename2'? –

+0

Ça ne marche pas. Mon assembleur n'interprète pas les barres obliques inverses de cette manière. –

+1

Il n'y a aucun dispositif que vous pouvez ouvrir qui vous permettra de brancher le clavier ISR. Cela ne peut tout simplement pas être fait à partir d'un processus en mode utilisateur, c'est quelque chose que vous auriez besoin d'un pilote. Cependant, même à partir d'un pilote, l'accrochage ISR est évité grâce à Kernel Patch Protection sur les versions modernes de Windows. A partir d'un pilote, vous pouvez utiliser un filtre I8042prt à la place, mais notez que cela ne fonctionnerait pas avec les claviers USB (qui n'ont pas leur propre IRQ de clavier dédié). https://msdn.microsoft.com/en-us/windows/hardware/drivers/hid/3rd-party-filter-drivers –

Répondre

0

Ceci est la syntaxe assembleur plat, vous devriez passer devicename sans échapper à barres obliques inversées:

devicename  db '\Device\KeyboardClass0',0 

Il y a aussi une bonne tutorial with source code in C sur la façon d'accéder au périphérique du clavier dans Windows. Vous pourriez le trouver intéressant.

Traduire à l'assemblage, vous aurez envie de faire quelque chose comme

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

Merci pour répondre à moi, le premier problème résolu, mais maintenant je CreateFile obtenir: ERROR_ACCES_DENIED lorsque j'essaie d'ouvrir le périphérique de clavier. Pourquoi ça arrive ??? –

+0

Probablement à cause de la politique de sécurité de Windows. Peut-être que vous devez exécuter en tant qu'administrateur ou quelque chose –

+0

Je cours déjà en tant qu'administrateur. Je pense que \ Device \ KeyboardClass0 n'est pas la poignée correcte pour le périphérique de clavier. Quelle est la poignée correcte de l'appareil à I hook clavier ISR ??? –