SYSTEM进程可以与非SYSTEM进程共享数据吗?

时间:2013-11-23 01:07:49

标签: c++ windows qt clipboard shared-memory

我正在尝试使用QSharedMemoryQClipboardSYSTEM进程(在WinSta0\\Winlogon桌面上运行)和普通用户进程之间共享数据,但两者都是无法与在普通桌面上运行的其他non-SYSTEM进程共享数据。我相信这是因为WinSta0\\Winlogon桌面是一个独立的桌面。

我的应用程序是一个程序,可以拍摄Windows安全桌面并将其发送到剪贴板。

问题是:有没有办法在该进程和non-SYSTEM进程之间共享内存数据? (实际上我正在使用文件来完成这项工作)。

1 个答案:

答案 0 :(得分:2)

在Windows Vista及更高版本中,系统服务在隔离会话(“会话0”)中运行。这是导致问题的最可能原因。 (请注意,所有系统服务都在会话0中运行,无论它们是否在SYSTEM安全上下文中运行。同样,可以在任意会话中以SYSTEM启动进程。)< / p>

每个会话都有一个单独的WinSta0工作站,因此是一个单独的剪贴板。所以剪贴板功能在这里不起作用。

文件映射对象(共享内存)可以跨会话边界工作。但是,我不知道Qt是否可以这样做。最好的选择似乎是使用setNativeKey,这可能决定了文件映射的名称;要创建跨越会话边界的文件,请使用Global\中所述的以{{1}}开头的名称。如果可能,请考虑直接使用Win32 API而不是Qt。