Windows 尝试从用户模式进程创建全局文件映射对象失败

Windows 尝试从用户模式进程创建全局文件映射对象失败,windows,winapi,shared-memory,file-mapping,Windows,Winapi,Shared Memory,File Mapping,我有一个Windows应用程序,运行时不需要提升。我需要为要在应用程序的所有运行实例之间共享的内存阵列创建一个文件映射对象(请注意,其中一些实例可能在不同的登录会话中运行) 我调用API来创建它,使用一个全局名称,即global\sharedname,使用一个安全描述符,允许all访问everybody,但该API失败,错误代码为5,或者error\u access\u DENIED 然后我开始阅读文档,发现我的流程需要SeCreateGlobalPrivilege权限。但是当我尝试分配该权限时

我有一个Windows应用程序,运行时不需要提升。我需要为要在应用程序的所有运行实例之间共享的内存阵列创建一个文件映射对象(请注意,其中一些实例可能在不同的登录会话中运行)

我调用API来创建它,使用一个全局名称,即
global\sharedname
,使用一个安全描述符,允许
all
访问
everybody
,但该API失败,错误代码为5,或者
error\u access\u DENIED

然后我开始阅读文档,发现我的流程需要
SeCreateGlobalPrivilege
权限。但是当我尝试分配该权限时,返回错误代码
error\u NOT\u ALL\u ASSIGNED
,我被卡住了

那么这里的诀窍是什么,那个变态女士想让我们怎么做


另外,我以前可以创建一个全局命名互斥体(用于同步访问共享内存),该互斥体具有相同的
所有人的所有访问权限
安全描述符和
全局\sharedmutex
名称,没有问题。

只有管理员和会话0中运行的服务,可以获得在
Global
命名空间中创建文件映射所需的
SeCreateGlobalPrivilege
权限。假设您不想将代码重新写入服务,则必须生成一个单独的提升进程来创建文件映射。

谢谢您的确认。我倾向于这样认为。另一方面,强加这一限制是多么荒谬?为什么我们不能在非提升进程之间共享数据。。。无论如何,这不是一个问题,只是我对平台的失望。回答你的问题,不,我不能产生一个提升的过程。解决方法是使用共享文件系统文件来共享数据。唯一的缺点是它将非常不安全,因为我必须将其ACL更改为
每个人都有读写访问权
。据我所知,“GLOBAL\sharedname”用于创建可从所有会话访问的对象。您真的需要从多个会话或仅通过多个进程访问它吗?