【问题标题】:Application hooking :: x64 system应用挂钩 :: x64 系统
【发布时间】:2009-05-27 17:31:42
【问题描述】:

在 64 位系统上挂钩 64 位和 32 位进程有什么秘诀吗?

在我目前正在编写的应用程序中,我需要能够挂钩 64 位进程。挂钩 32 位进程在 64 位和 32 位系统上工作得很好,但是在尝试挂钩 64 位应用程序时不会收到任何消息。

在任何人告诉我不应该做这样的事情之前,让我解释一下这对我来说是一件非常必要的事情。如果不设置全局系统挂钩,我的应用程序将毫无用处/毫无意义。

此应用程序是用 C#/WPF 编写的,但是使用 C++ dll 来执行实际的挂钩。我已经尝试为 64 位系统编译 dll,尽管它仍然没有做它应该做的事情。在为 32 位系统编译和运行时,它完全可以正常工作。

*Edit:: 我说的是挂钩窗口消息 - WH_CBT & WH_SHELL 消息

【问题讨论】:

  • 你说的是挂钩 win32 windows 消息吗?

标签: 64-bit hook 32-bit


【解决方案1】:

为了挂钩 32 位和 64 位进程,您需要确保:

  1. 您有 32 位 DLL 来挂钩 32 位进程和 64 位 DLL 来挂钩 64 位进程
  2. SetWindowsHookEx() 被调用从 32 位代码挂钩 32 位进程和从 64 位代码挂钩 64 位进程。

后者基本上意味着您必须创建都调用 SetWindowsHookEx() 的 32 位和 64 位可执行文件,分别提供 32 位和 64 位 DLL 作为 hMod 参数。

如果您的应用程序是 32 位的,则您必须生成 64 位进程,该进程将调用 SetWindowsHookEx() 并且在您取消挂钩之前可能什么都不做。请注意,当/如果此进程退出/终止时,Windows 将自动取消设置挂钩,因此它必须在您需要挂钩时一直保持活动状态,可能是您的应用程序的整个生命周期 - 在这种情况下,您可以创建 64 位进程WaitForSingleObject() 直到您的主应用程序进程退出/终止,并在 WaitForSingleObject() 完成后取消挂钩并退出。

【讨论】:

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