Bun*_*ori 11 c++ windows winapi memory-mapped-files windows-7
我希望使用命名共享内存来实现IPC.
为此,其中一个步骤是使用CreateFileMapping()获取映射内存对象的句柄.
我完全按照MSDN网站的说法做到:http://msdn.microsoft.com/en-us/library/aa366551( v = VS.85).aspx:
hFileMappingHandle = CreateFileMapping
(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
256, // maximum object size (low-order DWORD)
"Global\\MyFileMappingObject" // name of mapping object
);
DWORD dwError = GetLastError();
Run Code Online (Sandbox Code Playgroud)
但是,返回的句柄始终为0x0,并且返回的系统错误代码为:0x5(拒绝访问.)
有没有人有同样的经历,还有一种解决方法吗?我使用MSDN网站作为我的参考,所以我不认为,代码中存在问题.
Eug*_*its 11
看起来你没有足够的权限.
来自MSDN:
从会话零以外的会话在全局命名空间中创建文件映射对象需要SeCreateGlobalPrivilege特权.有关更多信息,请参阅内核对象命名空间.
...
通过使用CreateFileMapping从会话零以外的会话中在全局命名空间中创建文件映射对象是特权操作.因此,在任意远程桌面会话主机(RD会话主机)服务器会话中运行的应用程序必须启用SeCreateGlobalPrivilege才能成功在全局命名空间中创建文件映射对象.权限检查仅限于创建文件映射对象,不适用于打开现有对象.例如,如果服务或系统创建文件映射对象,则任何会话中运行的任何进程都可以访问该文件映射对象,前提是该用户具有必要的访问权限.