0

请您帮我了解在本地/全局命名空间中是否可以有 2 个同名的共享内存对象?我知道如果我们第一次创建了一个共享内存对象,那么我们需要调用OpenFileMapping/MapViewOfFile来打开一个对象。如果我调用CreateFileMapping已经创建的对象会发生什么?

例如

CreateFileMapping(INVALID_HANDLE_VALUE,    // use paging file
                  NULL,                     // default security 
                  PAGE_READWRITE,           // read/write access
                  0,                        // max. object size 
                  sizeof(BackupData),       // buffer size  
                  "SharedMemory");          // name of mapping object
4

1 回答 1

1

MSDN 文档准确地CreateFileMapping告诉您需要了解的内容:

微软

因此,您不能在同一个命名空间(全局或本地)中使用相同的名称。您甚至不能为不同类型的内核对象使用相同的名称。

如果您尝试创建与现有文件映射同名的新文件映射,它将尝试打开现有文件映射(取决于您的页面保护属性)。如果成功,您获得现有对象的句柄,但您还将获得ERROR_ALREADY_EXISTS的返回值GetLastError

如果从逻辑上考虑,在进程之间共享文件映射的唯一方法是使用相同的名称,因此使用相同名称的两个不同映射毫无意义!

于 2013-10-14T13:54:35.177 回答