求教,HOOK成功后被HOOK的进程崩溃,求指点

tomhe666 2013-08-16 12:51:09
我用钩子函数拦截指定进程(自己使用CreateProcess加载的进程)按键消息,SetWindowsHookEx执行成功,但是在目标进程窗口按键时,目标进程崩溃? WH_KEYBOARD换成WH_CBT则目标进程直接崩溃. 换句话说,只要HOOK成功,就会使目标进程不行.



/////////////////////////////////////////////////////////////////////////////////////////////
//加载进程
PROCESS_INFORMATION pi;
if( !LoadApp("d:\\spm.exe", "d:\\", &pi) )
{
return;
}

//获取HookProc函数所在DLL的句柄DLL为自己创建
HMODULE dllHinstance = GetModuleHandle("HookDll.dll");
Sleep(100);
创建钩子,可以成功
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD, CheckWindowHookProc, dllHinstance, pi.dwThreadId);
if(hook)
{
//UnhookWindowsHookEx(hook);
}

//DLL中的HookProc函数,#define HOOKDLL_API __declspec(dllexport)
HOOKDLL_API LRESULT CALLBACK CheckWindowHookProc(int nCode, WPARAM wParam ,LPARAM lParam)
{
::MessageBox(NULL, "hook ok", "hook", 0);
return 0; //CallNextHookEx(0, nCode, wParam, lParam);
}

...全文
802 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomhe666 2013-08-16
  • 打赏
  • 举报
回复
现在我已经解决一部分问题,目标进程崩溃的原因是因我的DLL在程序中用LIB静态连接的,这样就会崩,后来改成LoadLibiray装载再GetProcAddress,可以实现功能了。 这个程序被我移植到delphi上了,在delphi下钩子安装部分正常,消息拦截正常,然而执行UnHookWindowsHookEx目标进程又弹出对话框提示某地址内存读写失败,内容如楼主位的截图,但是确定后可以继续正常执行。 UnHookWindowsHookEx反回值我看了,是成功的
woshinia 2013-08-16
  • 打赏
  • 举报
回复
我记得似乎要return DefaultWindowProc之类的的,函数名忘了,自己查吧。
「已注销」 2013-08-16
  • 打赏
  • 举报
回复
有这种东西,你知道吗? #pragma data_seg("Share")
tomhe666 2013-08-16
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
KeyboardProc MSDN的注释上说的很明白 如果你不想再传递 返回非零值
没关系统啊,那个函数返回什么,目标进程还是崩溃的
zgl7903 2013-08-16
  • 打赏
  • 举报
回复
KeyboardProc MSDN的注释上说的很明白 如果你不想再传递 返回非零值

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧