从注入的DLL控制Win32进程(VC ++。NET 2010)

时间:2012-01-04 02:46:08

标签: c++ dll controls exe

我已将DLL文件注入另一个进程,我希望通过外部EXE与它通信。如何与注入的DLL进行通信? :/

2 个答案:

答案 0 :(得分:3)

如果我已正确理解您的问题,您已向进程注入了一个DLL,并希望通过某些外部EXE与它进行通信。您可以在此处使用IPC(进程间通信)的标准方法。我知道链接不应该单独发布,但是Windows上的IPC是一个过于宽泛的主题,无需复制和粘贴链接文章,无法全面覆盖。

我做了与您在此处尝试的相同的事情,并通过named piping使用data copyingWM_COPYDATA进行了IPC。但是,我使用每种形式的IPC都有一个特殊的原因,所以我们确实需要在推荐单一形式之前从您的问题域中了解更多。

您正在做的事情是,您在已经转换为LPTHREAD_START_ROUTINE的函数上调用CreateThread,这意味着它应该指向ThreadProc回调。您当前的void WINAPI ()签名与所需的DWORD WINAPI (LPVOID)不符。

如果您需要做的所有DLL都是转发消息,则可以将其作为消息的代理。

  • 让DLL创建一个不可见的窗口
  • 将窗口句柄传递给源进程
  • 将源流程调度消息发送到此窗口
  • DLL将接收这些消息,然后可以将它们转发到目标窗口

但是,如果这就是你需要做的全部,那么根本不需要在中间有一个DLL。这就是为什么我说我们需要有关您的问题域的更多信息。

如果您尝试以可执行文件的形式提供注入DLL的内容,然后与DLL进行通信并且DLL进行回传,您可能需要查看我工作的project一段时间以前。这正是如此。

答案 1 :(得分:1)

您需要在EXE和注入DLL的应用程序之间进行通信。

因此,在您的DLL中,您需要等待来自EXE的某种通信的spawn a thread。您不能等待DllMain中的事件,因为这会使应用程序死锁。

一种简单的方法是创建named eventwait for it to be set in your DLL。然后在外部EXE中,当您点击按钮时,您set the event