繁体   English   中英

如何安全地从DLL挂接到消息泵中?

[英]How do I safely hook into the message pump from a DLL?

我正在尝试从加载DLL的进程中获取消息。

我试过了:

SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)WndProc, hInstance, 0);

这给了我关于“由于缺少系统Y.dll而无法启动程序X”的错误弹出窗口。 这就是我在标题中“安全”放置的原因。

我也尝试过:

SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)WndProc, hInstance, threadId);

其中threadId是DLLMain中GetCurrentThreadId()的结果。 这个可以工作,但是我没有收到窗口的任何消息(只有一堆512和1025)。

消息与线程和窗口相关,您的DLL可能由进程加载。 因此,没有直接的对应关系。

另一方面,钩子是全局的或每个线程的。

总之,这意味着您必须选择是只从特定线程中获取消息,还是从全局(特定桌面中所有进程中的所有线程)中获取消息,以便自己过滤出自己感兴趣的进程。

您的第二个代码段是一个线程钩子。 第一个是全局挂钩,您肯定在其中做错了什么,因为成功的挂钩本身不会引起您提到的错误消息。

我猜您正在直接从DLLMain内部调用这些函数。 可以从DLLMain安全调用的函数受到严重限制,有关此信息,请参阅DLLMain上的MSDN文档

没有显式的安全和不安全函数列表,但是似乎您的第一个代码片段中对SetWindowsHookEx的调用正在执行DLLMain函数中禁止的操作,因此DLL无法正确加载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM