【问题标题】:Hook 32bit Process In 64bit Windows在 64 位 Windows 中挂钩 32 位进程
【发布时间】:2012-07-11 23:04:57
【问题描述】:

在window7 64bit 上使用键盘挂钩时出现问题。 我做这些事情: 1.创建一个32位的dll 2. 加载到应用程序并设置WindowHookEx

我已经成功挂接到 32 位应用程序(Y!M、Skype...),但是当我挂接到我的桌面或任何 64 位应用程序(记事本)时,该应用程序会冻结,直到我停止挂接应用程序。 我创建了 64 位 dll,在上面做同样的事情,并且在 32 位进程中遇到了同样的问题。

所以,我认为问题出在我的 32 位 dll 中,无法注入 64 位进程。但是我不知道如何在窗口关注它时注入 64bit dll 来处理它。

我想知道有什么方法可以做到这一点,以及如何做到这一点。或者我可以只挂接32位进程而不挂接64位进程,你能告诉我怎么做吗? 谢谢。

【问题讨论】:

  • 您需要创建一个 64 位应用程序来挂钩 64 位进程。所以你基本上需要 3 个进程,一个用于挂钩 32 位应用程序,一个用于 64 位应用程序,一个用于协调它们。通过使用低级键盘钩子来避免这一切,它不需要注入 DLL。

标签: c++ windows winapi hook


【解决方案1】:

问题是您不能将 32 位 DLL 加载到 64 位进程中,或将 64 位 DLL 加载到 32 位进程中。来自Programming Guide for 64-bit Windows

... 32 位进程无法加载 64 位 DLL 执行,64 位进程无法加载 32 位 DLL 执行。

您需要有两个版本的 DLL:32 位和 64 位。但这只是部分解决方案。此外,您将需要确定要将 DLL 加载到其中的进程的体系结构。 WINAPI 函数GetBinaryType() 可以确定这一点,但它需要您的代码必须获取的二进制文件的路径。

【讨论】:

  • 谢谢,但你能详细解释一下吗,我该怎么做。
  • IsWow64Process 将是一个比 GetBinaryType 更有用的 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2012-10-26
  • 2012-04-03
  • 1970-01-01
  • 2013-03-25
  • 2013-02-06
  • 1970-01-01
相关资源
最近更新 更多