-
-
WH_CALLWNDPROC 全局HOOK SendMessage问题
-
发表于:
2020-6-27 01:23
4696
-
WH_CALLWNDPROC 全局HOOK SendMessage问题
本来今天在写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;
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课