2013-11-23 70 views
1

我試圖用QSharedMemoryQClipboard共享SYSTEM進程(WinSta0\\Winlogon桌面上運行)和普通用戶之間的過程數據,但均不能與他人分享non-SYSTEM正常的桌面上運行的進程的數據。我相信這是因爲WinSta0\\Winlogon桌面是一個孤立的桌面。系統進程可以與非系統進程共享數據嗎?

我的應用程序是拍攝Windows安全桌面並將其發送到剪貼板的程序。

現在的問題是:有什麼辦法可以在該進程和non-SYSTEM進程之間共享內存數據? (其實我正在使用一個文件來完成這項工作)。

回答

2

在Windows Vista和更高版本上,系統服務在隔離會話(「會話0」)中運行。這是你的問題最可能的原因。 (請注意,所有系統服務在會話0中運行,無論他們在SYSTEM安全上下文中運行與否。同樣,也可以在任意會話啓動過程爲SYSTEM。)

每次會議都有一個單獨WinSta0工作站,因此是一個單獨的剪貼板。所以剪貼板功能在這裏不起作用。

文件映射對象(共享內存)可能跨越會話邊界工作。但是,我不知道是否可以用Qt來做到這一點。最好的選擇似乎是使用setNativeKey,這大概確定了文件映射的名稱;要跨越會話邊界進行文件映射,請使用Global\開頭的名稱,如MSDN article on CreateFileMapping中所述。如果可能,請考慮直接使用Win32 API而不是Qt。