Winapi:钩函数中的非dll数据

WinAPI: Non-dll data in hook function

本文关键字:dll 数据 函数 Winapi      更新时间:2023-10-16

我想安装钩子(使用Winapi和C 在Windows上)获取发送到特定过程/线程的WindowProc(我程序已知的键输入事件)流程ID)。据我所知,我必须将钩程序放入DLL。到目前为止,一切都很好。但是挂钩过程需要使用安装钩子的程序中的数据。现在,我不知道如何从DLL内的挂钩过程访问这些数据。

我的第一个想法是在DLL本身内维护数据结构,并通过调用DLL中的另一个功能从外部进行更新。但是我不确定,如何确切地执行此操作(例如:我认为此数据结构必须共享数据,以使所有调用都相同,无论哪个过程/线程,但我不确定它)。

我已经查看了一些有关如何实现钩子的示例,但是这些示例从未使用过安装挂钩(或任何其他"用户代码")的原始程序中的数据。

当有人可以向我解释这一点,甚至简要概述如何解决上述问题(以及我的方法是否正确)时,我真的很感激。

非常感谢!

您可以使用共享数据部分

 // dll.cpp
 #pragma data_seg("myshared")
 int iShared;
 #pragma data_seg()
 #pragma comment(linker, "/section:myshared,RWS")

从dll导出一个函数,允许传递该截面中变量的值。从挂钩EXE(挂钩之前)调用该功能。挂钩过程中的实例dll将看到钩子设置的值。

您真正描述的是过程间通信(IPC):http://en.wikipedia.org/wiki/inter-process_communication

您的Windows选项是创建套接字,管道或共享记忆,并使用静音,信号量或事件进行同步。

除此之外,没有办法在注入另一个过程的DLL中调用功能。

您可以在此处查看我发布的示例:两个单独的进程共享相同的相机feed opencv