首页
社区
课程
招聘
[求助]HOOK(WH_CALLWNDPROC)导致crash?
发表于: 2008-12-20 15:14 8339

[求助]HOOK(WH_CALLWNDPROC)导致crash?

2008-12-20 15:14
8339
1.问题描述:
程序A用来设一个HOOK,把DLL map 到另一个程序calc.exe,用WH_CALLWNDPROC的回调处理。HOOK设置没有问题,但一点calc.exe里的菜单的"关于"时,就crash掉了,如图:


----------------------------------------------------------------------------------------------------
2. DLL里部分代码
#pragma data_seg (".shared")
HWND        g_hWndOth = 0;
HHOOK        g_hHook2 = 0;
#pragma data_seg ()

#pragma comment(linker,"/SECTION:.shared,RWS")

int EnHook(HWND hWndOth)
{       
       
        g_hWndOth = hWndOth;
                //设置HOOK
        g_hHook2 = SetWindowsHookEx( WH_CALLWNDPROC,(HOOKPROC)HookProc2, hDll, GetWindowThreadProcessId(hWndOth,NULL) );
       
                if(g_hHook2==NULL)
        {                       
                return 0;
        }
        return 0;
}

LRESULT HookProc2 ( int code,     
                 WPARAM wParam,  
                 LPARAM lParam     )
{       
                //里面就算不放处理语句,还是会出现crash问题
        return ::CallNextHookEx(g_hHook2, code, wParam, lParam);
}
----------------------------------------------------------------------------------------------------
3. Try程序来设置HOOK
void CTryDlg::OnOK()
{

        HWND hWndOth = ::FindWindow("SciCalc","计算器");
        if(!hWndOth)
        {
                MessageBox("Can't find the file!","Info",0);
                return;
        }
        //Set Hook
        EnHook(hWndOth);
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
  • 1.jpg (46.64kb,111次下载)
  • 2.jpg (65.43kb,110次下载)
收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有人来分析一下吗,我是最近才开始学HOOK的,看似很简单的问题,怎么会出错呢。
2008-12-20 20:04
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
3
HookProc2要使用__stdcall
2008-12-20 20:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
果然是这个问题,哎,自己太粗心了。 身边都没人交流,每次都来网络求助,太感谢ls了!
2008-12-20 21:03
0
游客
登录 | 注册 方可回帖
返回
//