全局WH_CBT钩子DLL只能加载到某些进程中 [英] Global WH_CBT hook DLL is loaded into some processes only

查看:487
本文介绍了全局WH_CBT钩子DLL只能加载到某些进程中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

主程序调用wi.dll中的SetHook安装全局WH_CBT钩子。

  bool WI_API SetHook() 
{
if(!g_hHook)
{
g_hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTProc,g_hInstDll,0);
}

return g_hHook!= NULL;
}

我假设安装全局钩子后,wi.dll应该加载到每个进程'地址空间。但是,wi.dll只能加载到某些进程。例如,如果我启动Skype,MS Word我可以看到wi.dll也被加载到这些进程(使用Process Explorer),但是如果我运行Firefox,uTorrent,Adobe Reader然后wi.dll没有加载到这些进程



我使用W7 64位,主程序和wi.dll是32位,这里提到的所有程序也是32位程序。 p>

任何想法为什么会这样的事情?



提前感谢

解决方案

钩链机制不是防弹的,依赖于遵循规则的每个人。如果应用程序安装自己的每线程 WH_CBT 钩子,并且在其钩子过程中不调用 CallNextHookEx ,早期的钩子赢了不要叫请参阅MSDN文档以获取 CallNextHookEx


The main program calls the function SetHook in the wi.dll to install global WH_CBT hook.

bool WI_API SetHook()
{
    if (!g_hHook)
    {
        g_hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC) CBTProc, g_hInstDll, 0);
    }

    return g_hHook != NULL;
}

I presume after installing global hook, wi.dll should be loaded into each process' address space. However wi.dll is loaded in to some processes only. For example, if I start Skype, MS Word I can see that wi.dll is loaded into these processes as well (using Process Explorer), however if I run Firefox, uTorrent, Adobe Reader then wi.dll is not loaded into these processes.

I'm using W7 64-bit, main program and wi.dll is 32-bit, all programs mentioned here is 32-bit programs as well.

Any ideas why that happens?

Thanks in advance.

解决方案

The hook chain mechanism is not bulletproof and relies on everyone involved following the rules. If an application installs its own per-thread WH_CBT hook and does not call CallNextHookEx in its hook procedure, earlier hooks won't get called. See the MSDN docs for CallNextHookEx.

这篇关于全局WH_CBT钩子DLL只能加载到某些进程中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆