Posted on 2010-01-13 00:30
S.l.e!ep.¢% 阅读(2312)
评论(0) 编辑 收藏 引用 所属分类:
RootKit
键盘钩子中KBDLLHOOKSTRUCT到MSG的转换,
|
|
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) {
assert(hookWnd !=NULL); if(nCode ==HC_ACTION) { KBDLLHOOKSTRUCT *Key_Info =(KBDLLHOOKSTRUCT*)lParam; DWORD dwvk = Key_Info->vkCode; DWORD dwMsg = 1; dwMsg += Key_Info->scanCode << 16; dwMsg += Key_Info->flags << 24; //str存储的即是键盘的键名。
#ifdef _DEBUG char str[20]={0}; GetKeyNameText( dwMsg, str, 20); #endif ::PostMessage( hookWnd, WM_USER_DEFINE,(WPARAM)dwvk,(LPARAM)dwMsg); if((166 <= dwvk && dwvk<=169)||(170 <= dwvk && dwvk<= 181)) returntrue; }
return CallNextHookEx(hhkHook, nCode, wParam, lParam); }
|
改部分代码在断点调试的情况下并不能屏蔽一些系统扩展键!在运行时可以屏蔽!可能系统的键盘事件是异步的,在一定时间没有TRUE返回的时候将调用别的事件函数(系统事件处理函数)。导致上述情况出现 !!!
|
|