【问题标题】:Windows Hooking and Dll LoadingWindows 挂钩和 Dll 加载
【发布时间】:2014-04-03 23:45:43
【问题描述】:

我正在研究改造一个旧的 CBT Windows 挂钩,但对它目前的工作方式有些困惑。它的设置方式是一个 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 会被加载到系统中触发挂钩的任何进程中。
  • @Jonathan Ahh,谢谢你提供的信息。如果您将其发布为答案,我会接受并投票,因为它完美地回答了我的问题。

标签: c++ windows dll hook


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多