過年有點無聊。嘗試玩了一下windows device driver
參考 : http://www.catch22.net/tuts/kernel1.asp
首先要下載WINDDK, driver development kit 裡面是建構driver的環境
包含 compiler, linker, 及一些lib, header
使用C語言,好像沒有用到clib ...
嘗試修改鍵盤的驅動程式
windows鍵盤滑鼠訊號傳遞大概是長這樣( 也許有錯 )
硬體 -> kbdfilter.sys -> kdbclass.sys -> Application
kdbfilter 這一個可能是某種裝置的驅動程式( 例如usb 或 ps/2 )
kdbclass 這一個接著處理鍵盤的輸入pass給Application
修改
[kdbclass.c]
VOID
KeyboardClassServiceCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PKEYBOARD_INPUT_DATA InputDataStart,
IN PKEYBOARD_INPUT_DATA InputDataEnd,
IN OUT PULONG InputDataConsumed
)
{
... 省略
ULONG i;
ULONG num;
ULONG keycode;
PKEYBOARD_INPUT_DATA data;
data = InputDataStart;
num = InputDataEnd-InputDataStart;
for(i=0;i
DbgPrint("Keyboard Filter Driver Sample - keycode=%u\n",keycode );
data++;
}
... 省略
}
重點是以下兩個東東
InputDataStart 鍵盤輸入的資料,Pointer到buffer起始位置
InputDataEnd 鍵盤輸入的資料,Pointer到buffer起始位置
Scan Code
scan make 1 就是MakeCode
[ntddkbd.h]
typedef struct _KEYBOARD_INPUT_DATA {
USHORT UnitId;
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
ULONG ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;
利用Debugview就可以看到鍵盤的輸入了...
從kernel mode直接取得,而沒有透過一些API
2008年2月9日 星期六
little hack of keyboard
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言