c++ - 邮寄消息 : How to post a message to a process that does not have a window?

标签 c++ windows multithreading winapi dll

我正在使用可对用户进行身份验证的设备与 Windows 凭据提供程序合作。与设备的通信在单独的线程上完成。

我创建并注册了一个与 Windows 交互的凭据提供程序 dlldll 创建一个线程来验证用户并调用凭据提供程序。但是,对凭据提供程序的调用当前是在创建的线程上进行的,而不是在 windows Logon/UI 所在的主线程上进行的。这显然会导致线程问题。

解决方案是使用PostMessage 将消息从创建的线程发布到Logon/UI 线程。我只将 PostMessage 与 Windows gui 应用程序一起使用。如何将消息从线程发布到应用程序中的 Windows Logon/UI 进程?

最佳答案

我最初的 react 是一样的:你不能。

但这不是一个完整的答案:你不必有一个完整的窗口,你只需要一个消息泵。 COM 在 STA(单线程单元)中运行时使用相同的技术。 STA 将创建一个隐藏窗口。这就是本地服务器主线程需要实现 Windows 消息泵的原因。

消息泵可以很简单:

MSG msg;
while (GetMessage (&msg, 0, 0, 0))
   DispatchMessage (&msg);

COM 这样做是为了允许在不同进程中的客户端和服务器之间进行 RPC。您可以这样做(谷歌搜索 COM STA,或在 MSDN 上阅读)

但你可能不需要那样下去...... 据我了解,您拥有两个线程(它们都在您的代码库中),并且它们在同一个进程中运行。您可以使用一些共享内存 + 信号方法(例如全局变量和互斥量)。

关于c++ - 邮寄消息 : How to post a message to a process that does not have a window?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647787/

相关文章:

c++ - IntelliSense 引擎无法正常运行的错误太多

c++ - 如何从我的 HTTP 服务器向客户端发送图像?

ios - 如何使用 phonegap 检测 ios 和 windows 设备中的来电?

windows - Windows 2003 上的通配符子域设置

java - Windows 在生成许多图像的 Java 代码执行期间(或之后)挂起

c++ - "volatile"是否仅阻止编译器优化?

c++ - 如何总结 std::set 的元素

c++ - C++中创建线程的基本问题

C# 控制台应用程序任务的线程问题

java - ExecutorService 中如何限制线程?