首页
论坛
课程
招聘
雪    币: 343
活跃值: 活跃值 (268)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝

WH_CALLWNDPROC 全局HOOK SendMessage问题

2020-6-27 01:23 1150

WH_CALLWNDPROC 全局HOOK SendMessage问题

2020-6-27 01:23
1150
本来今天在写SetWindowsHookEx的时候准备全局 hook  WH_CALLWNDPROC

SendMessage消息的时候发现了一个件很奇怪的事件,发现每次把安装成功提示框的MessageBox关闭的时候就出现了0xC0000005 很奇怪,每一次都是,而我们右多次把HOOK WH_CALLWNDPROC换成WH_KEYBOARD 就没问题,换成WH_MOUSE也没问题(当然都是全局的),调试了1个小时,我猛然想起我HOOk的SendMessage消息,而Windows系统就是基于消息驱动的,所有的动作都是消息在传播,所以我点击关闭MessageBox 就出问题了
把本来MessageBox关闭产生的消息应该发送给本程序,而我在钩子处理程序里把SendMessage关闭消息传递给了下一个钩子然后就挂了,
为了验证这个结论,然后我在在这个钩子安装成功后不执行其他代码,打开一个win32程序点击关闭的时候就挂了,甚至刷新桌面的时候也挂了,求大佬们告知

 

这是动态链接库程序 DLL

 

#include "stdafx.h"
DWORD ImageBaseAddr=0;
HHOOK hook=0;
extern "C" _declspec(dllexport) LRESULT HookProc(int code, WPARAM wParam, LPARAM lParam);
extern "C" _declspec(dllexport) int UnloadHookex();
extern "C" _declspec(dllexport) int InserHookEx(HINSTANCE Base);
LRESULT HookProc(int code, WPARAM wParam, LPARAM lParam){
if(code<0){
return CallNextHookEx(hook,code,wParam,lParam);
}
return CallNextHookEx(hook,code,wParam,lParam); //将钩子信息传递给当前钩子链中的下一个钩子过程.
}
int InserHookEx(HINSTANCE Base){
hook=SetWindowsHookEx( WH_CALLWNDPROC,(HOOKPROC)HookProc,Base,0); //最后一个参数为0是
if(NULL==hook){
return 0;
}
return 1;
}
int UnloadHookex(){
if(!UnhookWindowsHookEx(hook)){
return 0;
}
return 1;
}



HWS计划·2020安全精英夏令营来了!我们在华为松山湖欧洲小镇等你

最新回复 (2)
雪    币: 2217
活跃值: 活跃值 (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
htpidk 活跃值 2020-6-27 12:49
2
0
LRESULT HookProc(int code, WPARAM wParam, LPARAM lParam)改成LRESULT __stdcall HookProc(int code, WPARAM wParam, LPARAM lParam)
雪    币: 343
活跃值: 活跃值 (268)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
taolaoda 活跃值 2020-6-27 21:15
3
0
我真的是脑子瓦特了,调用约定没写  多谢前辈相助多谢了
游客
登录 | 注册 方可回帖
返回