python应用程序和注入的DLL之间的IPC

时间:2010-01-12 14:08:38

标签: python dll ipc code-injection

你好堆栈溢出:有时读者,第一次海报。

背景

Windows XP运行XP SP3,即将升级到Windows 7(MSDNAA< 3)

我有一个注入的DLL,它通过挂钩一个每秒被调用数千次的函数来获取周期。

我想通过python应用程序来传达/控制这个DLL。基本上,DLL完成工作,python应用程序提供大脑/决策。

我这样做的游戏计划是,我会在DLL中有一个计数器和一个if语句。每次调用钩子函数时,都会反转++,然后跳回原函数,直到if(counter == 250){// dostuff(); }。我虽然落后于它,但它将允许目标应用程序大部分畅通无阻地运行,但仍然会让我做有趣的事情。

问题:

我完全不知道应该使用哪种IPC方法来进行通信。我们有套接字,共享内存,管道,文件映射(?),RPC和其他(看似)深奥的东西,比如写入剪贴板。

除了玩具示例,我从未实施任何类型的IPC。

我很确定我需要的东西:

  • 可以处理python和DLL之间的来回交谈
  • 不阻止/等待
  • 可以检查等待数据,如果没有
  • 则继续
  • 如果涉及锁定,可以继续而不是等待
  • 不花费大量时间阅读/写作

帮助?感谢您的时间,我希望我已经提供了足够的一般信息,并没有违反任何公认的惯例。

我想补充说相关问题框非常酷,我在发布前仔细阅读过。

2 个答案:

答案 0 :(得分:2)

尝试套接字。您的要求基本上是异步操作的要求; Python在套接字上有异步IO的asyncore模块。同时,它看起来不像Python的stdlib可以异步处理其他IPC的东西,所以我不建议使用它们。

答案 1 :(得分:1)

如果您不关心实时,那么您可以使用文件系统进行通信:DLL输出的日志文件,以及不时读取的配置文件,以更改DLL的行为。