DLL共享存储器的问题不同的会话,服务和用户会话(DLL shared memory problem

2019-07-29 16:19发布

首先,感谢您阅读:)

我用DLL共享存储器,并使用互锁〜功能。 (运7)

DLL通过服务EXE和用户应用程序的exe加载。

要知道,服务会话为0,用户会话1如此不同。

如果DLL的共享内存值由用户应用程序的exe改变,没有反映服务的DLL共享的存储器值。

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

Answer 1:

共用部分没有跨会话边界工作了。 微软认为这是一个安全问题,并刻意打破了功能,前一段时间如果没有记错。 我相信现在每个会话看到部分的自己的私人副本。

然而内存映射文件(货币市场基金)做工精细,我在地方分享部分,现在用这个。 唯一令人沮丧的是,全球可用的货币市场基金具有高特权来创建,所以我用一个服务来创建MMF。



Answer 2:

尝试使用全局共享内存。 微软的文档说:

用前缀“全球\”文件映射对象名称允许进程相互即使它们在不同的终端服务器会话通信。



Answer 3:

不要忘记, 凭证共享内存翻过会话时也发挥了作用。

这就要求第一进程必须具有SeCreateGlobalPrivilege特权



文章来源: DLL shared memory problems with different session, service and user session