2

我有一个无需提升即可运行的 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

4

1 回答 1

6

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

于 2013-02-23T11:27:38.407 回答