c++ - Windows Hook 和 DLL 加载

标签 c++ windows dll hook

我正在研究改造一个旧的 CBT windows 钩子(Hook),我对它目前的工作方式有点困惑。它的设置方式是一个 dll 处理 Windows Hook 及其逻辑,而另一个程序在应该设置 Hook 时调用该 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 时如何触发此事件?由于它是一个全局 Hook ,我认为 Windows 会加载 dll 并持久化它,并在需要时调用 HookProc。但据我所见,它就像在调用 HookProc 时被加载备份一样。这是它通常的工作方式,还是代码库的另一部分可能导致这种情况?

最佳答案

实现全局 Hook 的 DLL 会加载到系统中触发 Hook 的任何进程中。

(这正是全局 Hook 必须作为 DLL 实现的原因 - 这样它们就可以加载到其他进程中)。

关于c++ - Windows Hook 和 DLL 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22138105/

相关文章:

c# - 将 c# asp.net web 应用程序与 C++ dll 链接时,dll 代码是在服务器上运行还是在客户端上运行?

Java - Java 类的 NoClassDefinitionFoundError

c++ - 使用 Boost [C++] 将 http 文件内容读取为字符串

windows - 在 Windows 上运行 Mac OS 应用程序?

C++ 多态性。为什么这是有效的?

windows - 如何从 git bash 执行 .bat 然后返回控制台?

.net - 强制 .NET Windows 应用程序。以英文形状显示数字

c# - 本地化应用名称

c++ - 为 std::multiply 和 std::plus 获取中性元素

C++ typedef 成员函数签名语法