DLL与不同的会话,服务和用户会话共享内存问题

时间:2012-05-31 05:08:38

标签: windows session sync shared

首先,谢谢你读到这个:)

我使用DLL共享内存并使用interlocked~函数。 (赢7)

由服务exe和用户app exe加载的DLL。

你知道,服务会话是0,用户会话是1那么不同。

如果DLL的共享内存值由用户app exe更改,则不反映服务的DLL共享内存值。

有没有办法同步服务和用户应用程序的DLL共享内存?

3 个答案:

答案 0 :(得分:2)

共享部分不再跨会话边界工作。微软认为这是一个安全问题,并且如果内存服务的话,很久以前就故意破坏了这个功能。我相信每个会话现在都会看到自己的部分私人副本。

然而,内存映射文件(MMF)工作正常,我现在用它代替共享部分。唯一的挫折是全局可用的MMF必须以高权限创建,所以我使用服务来创建MMF。

答案 1 :(得分:1)

尝试使用全局共享内存。 Microsoft's documentation说:

  

使用“Global”允许前缀文件映射对象名称   即使它们处于不同的状态,也可以相互通信   终端服务器会话。

答案 2 :(得分:0)

不要忘记credentials在跨会话共享内存时也起作用。

  

这要求第一个进程必须具有SeCreateGlobalPrivilege权限