我正在尝试使用QSharedMemory
和QClipboard
在SYSTEM
进程(在WinSta0\\Winlogon
桌面上运行)和普通用户进程之间共享数据,但两者都是无法与在普通桌面上运行的其他non-SYSTEM
进程共享数据。我相信这是因为WinSta0\\Winlogon
桌面是一个独立的桌面。
我的应用程序是一个程序,可以拍摄Windows安全桌面并将其发送到剪贴板。
问题是:有没有办法在该进程和non-SYSTEM
进程之间共享内存数据? (实际上我正在使用文件来完成这项工作)。
答案 0 :(得分:2)
在Windows Vista及更高版本中,系统服务在隔离会话(“会话0”)中运行。这是导致问题的最可能原因。 (请注意,所有系统服务都在会话0中运行,无论它们是否在SYSTEM
安全上下文中运行。同样,可以在任意会话中以SYSTEM
启动进程。)< / p>
每个会话都有一个单独的WinSta0
工作站,因此是一个单独的剪贴板。所以剪贴板功能在这里不起作用。
文件映射对象(共享内存)可以跨会话边界工作。但是,我不知道Qt是否可以这样做。最好的选择似乎是使用setNativeKey
,这可能决定了文件映射的名称;要创建跨越会话边界的文件,请使用Global\
中所述的以{{1}}开头的名称。如果可能,请考虑直接使用Win32 API而不是Qt。