Winapi:钩函数中的非dll数据
WinAPI: Non-dll data in hook function
我想安装钩子(使用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
相关文章:
- DLL共享数据的推荐方式是什么
- 在 EXE/DLL 之间传递数据
- C++ 安全数组在从 c# COM dll 返回时具有无效数据
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- 放置在外部 DLL 中的类中的字符串数据的内存损坏
- 从 dll 读取矢量数据C++?
- 在 c++ 中的 dll 边界之间安全地传递数据
- 在 c++ 中,如何将 dll 获取的数据发送到 exe
- 在 CSharp 中使用正确的数据类型加载C++ dll
- 初始化 C# IntPtr 以接受来自非托管 C++ DLL 的数据?
- 使用P/Invoke从MFC DLL函数中读取VB.NET中的结构化数据
- 通过指针值将数据传递到DLL
- ATL ActiveX DLL 作为映射类型图像和数据加载了两次
- Winapi:钩函数中的非dll数据
- 将数据从Delphi DLL传递到C++应用程序中
- 将二进制数据从Qt/C++DLL传递到Delphi主机应用程序中
- 将数据从 Unity3D 传递到 C++ dll,反之亦然
- 在DLL的基地址处Win API ReadProcessMemory返回意外数据
- 从数组数据中缺少第一个元素的 DLL 返回C++结构
- 将字符串从 C# 传递到 c++ .dll会打乱数据