繁体   English   中英

Windows挂钩和Dll加载

[英]Windows Hooking and Dll Loading

我正在研究改造一个旧的CBT窗口挂钩,并对它目前的工作方式感到有些困惑。 它的设置方式是一个DLL处理Windows挂钩及其逻辑,而另一个程序在设置挂钩时调用该dll。 它看起来像这样:

LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

// this is the function the other program calls into
void InstallHook()
{
    // hdll is this dll's address
    SetWindowsHookEx(WH_CBT, HookProc, hDLL, 0);
}

然后我们有了DllMain功能。 每当调用hookProc函数时,似乎都会调用该dllmain函数,并且我不理解这种行为。 我已经检查了fdwReason,并且由于dll进程附加事件而被调用。

每次调用HookProc时,如何触发此事件? 因为它是一个全局钩子,我以为windows会加载dll并且只是持久化它,在需要时调用HookProc。 但是从我所看到的情况来看,它的作用就像是在调用HookProc时随时加载。 这是它通常如何工作,还是代码库的另一部分可能导致这种情况?

实现全局钩子的DLL被加载到触发钩子的系统中的任何进程中。

(这正是全局钩子必须实现为DLL的原因 - 因此可以将它们加载到其他进程中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM