我正在使用对用户进行身份验证的设备来使用Windows凭据提供程序。与设备的通信是在一个单独的线程上完成的。
我创建并注册了Windows与之接口的凭据提供程序dll
。 dll
创建一个线程,用于对用户进行身份验证并调用凭据提供程序。但是,对凭据提供程序的调用当前位于创建的线程上,而不是Windows Logon/UI
所在的主线程。这显然会导致线程问题。
解决方案是使用PostMessage
将消息从创建的线程发布到Logon/UI
线程。我只使用了PostMessage
和windows gui应用程序。如何将消息从线程发布到我的应用程序中的Windows Logon/UI
进程?
答案 0 :(得分:2)
我最初的反应是一样的:你做不到。
但这不是一个完整的答案:你不需要一个完整的窗口,你只需要一个消息泵。在STA(单线程单元)中运行时,COM使用相同的技术。 STA将创建一个隐藏窗口。这就是本地服务器主线程需要实现Windows消息泵的原因。
消息泵可以简单如下:
MSG msg;
while (GetMessage (&msg, 0, 0, 0))
DispatchMessage (&msg);
COM这样做是为了允许不同进程中的客户端和服务器之间的RPC。您可以这样做(谷歌用于COM STA,或在MSDN上阅读)
但你可能不需要那样下去...... 据我所知,你拥有两个线程(它们都在你的代码库中),并且它们在同一个进程中运行。您可以使用一些共享内存+信令方法(如全局变量和互斥锁)。