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

c00*_*0fd 2 windows winapi shared-memory file-mapping

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

我调用CreateFileMapping API来创建它,使用全局名称,即Global\sharedname使用安全描述符提供all访问权限,everyone但API失败,错误代码为5,或者ERROR_ACCESS_DENIED.

然后我开始阅读文档,发现我的进程需要SeCreateGlobalPrivilege特权.但是当我尝试分配该权限时,AdjustTokenPrivileges返回错误代码ERROR_NOT_ALL_ASSIGNED,我被卡住....

那么这里有什么诀窍,那个疯狂的MS怎么想让我们这样做?

PS.我之前可以使用相同的all access for everyone安全描述符和Global\sharedmutex名称创建一个全局命名的互斥锁(用于对共享内存的同步访问),而不会出现问题.

Rem*_*eau 6

只有在会话0中运行的管理员和服务才能获得SeCreateGlobalPrivilegeGlobal命名空间中创建文件映射所需的权限.假设您不想将代码重新编写到服务中,则必须生成单独的提升过程来创建文件映射.