我试图使用QSharedMemory
和QClipboard
在SYSTEM
进程(运行在WinSta0\\Winlogon
桌面上)和普通用户进程之间共享数据,但两者都无法与运行在普通桌面上的其他non-SYSTEM
进程共享数据。我相信这是因为WinSta0\\Winlogon
桌面是一个孤立的桌面。
我的应用程序是一个程序,拍摄Windows安全桌面并将其发送到剪贴板。
问题是:在该进程和non-SYSTEM
进程之间是否存在共享内存数据的方法?(实际上,我正在使用一个文件来完成这项工作)。
发布于 2013-11-25 06:59:53
在Windows和更高版本上,系统服务在独立会话(“会话0")中运行。这是你问题的最可能的原因。(请注意,所有系统服务都在会话0中运行,无论它们是否在SYSTEM
安全上下文中运行。类似地,可以在任意会话中以SYSTEM
的形式启动进程。)
每个会话都有一个独立的WinSta0
工作站,因此有一个单独的剪贴板。所以剪贴板功能在这里是行不通的。
文件映射对象(共享内存)可以跨会话边界工作。但是,我不知道Qt是否有可能做到这一点。最好的选择似乎是使用setNativeKey
,它可以确定文件映射的名称;要进行跨会话边界的文件映射,请使用以Global\
开头的名称,如MSDN关于CreateFileMapping的文章中所述。如果可能的话,可以考虑直接使用Win32 API而不是Qt。
https://stackoverflow.com/questions/20157239
复制相似问题