0

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

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

由服务 exe 和用户应用程序 exe 加载的 DLL。

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

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

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

4

3 回答 3

2

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

但是内存映射文件(MMF)工作正常,我现在用它代替共享部分。唯一令人沮丧的是,必须以高权限创建全局可用的 MMF,因此我使用服务来创建 MMF。

于 2012-08-16T10:10:48.487 回答
1

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

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

于 2012-05-31T05:23:53.187 回答
0

不要忘记,在跨会话共享内存时,凭据也会发挥作用。

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

于 2012-05-31T05:34:42.333 回答