系统错误 0x5:CreateFileMapping()

新手上路,请多包涵

我希望 使用命名共享内存来实现 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();

但是,返回的句柄始终为 0x0 ,返回的 系统错误代码 为: 0x5(拒绝访问。)

  • 仅需要 命名内存共享(不是文件共享)。
  • Windows 7 x64 位操作系统
  • 管理员的 用户权限可用
  • 开发的应用程序:64位插件应用程序 (.dll)

有没有人有同样的经历,求解决方法?我使用 MSDN 站点作为参考,所以我不认为代码中存在问题。

原文由 Bunkai.Satori 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 769
1 个回答

看起来你没有足够的权限。

来自 MSDN:

从会话零以外的会话在全局命名空间中创建文件映射对象需要 SeCreateGlobalPrivilege 权限。有关详细信息,请参阅内核对象命名空间。

通过使用 CreateFileMapping 从会话零以外的会话在全局命名空间中创建文件映射对象是一项特权操作。因此,在任意远程桌面会话主机(RD 会话主机)服务器会话中运行的应用程序必须启用 SeCreateGlobalPrivilege 才能在全局命名空间中成功创建文件映射对象。权限检查仅限于创建文件映射对象,不适用于打开现有对象。例如,如果服务或系统创建了文件映射对象,则在任何会话中运行的任何进程都可以访问该文件映射对象,前提是用户具有必要的访问权限。

原文由 Eugene Mayevski ‘Callback 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题