SYSTEM进程是否可以与非SYSTEM进程共享数据

Can a SYSTEM process share data with a non-SYSTEM process?

本文关键字:SYSTEM 进程 共享 数据 是否      更新时间:2023-10-16

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

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

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

在Windows Vista及更高版本上,系统服务在独立会话("会话0")中运行。这很可能是您出现问题的原因。(请注意,所有系统服务都在会话0中运行,无论它们是否在SYSTEM安全上下文中运行。同样,也可以在任意会话中以SYSTEM的身份启动进程。)

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

文件映射对象(共享内存)可以跨会话边界工作。然而,我不知道用Qt是否可以做到这一点。最好的选择似乎是使用setNativeKey,它大概确定了文件映射的名称;要使文件映射跨会话边界,请使用以Global开头的名称,如MSDN关于CreateFileMapping的文章中所述。如果可能,请考虑直接使用Win32 API,而不是Qt。