【发布时间】:2014-02-07 10:17:11
【问题描述】:
我正在寻找一种在 Windows 平台上创建共享内存块的可能性,该共享内存块对除创建共享内存块的进程之外的所有进程都具有写保护。
详细我需要以下内容:
进程 (1) 必须创建一个共享内存块并且应该能够修改缓冲区。 进程(2)应该能够打开和读取创建的共享内存块,但不能有修改内容的权限。由于安全/安全原因,这很重要。
目前我有一个解决方案,使用 CreateFileMapping() 和 MapViewOfFile() 创建共享内存块,然后在进程 (1) 和 (2) 中具有读写权限,例如:
HANDLE handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, highSize, lowSize, L"uniquename");
void* sharedMemory = MapViewOfFile(handle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
// now we can modify sharedMemory...
这两行代码可以在两个进程中应用,因为第一个进程创建共享内存块,第二个进程只是打开共享内存。 但是,由于在创建内存块期间提供的访问值(PAGE_READWRITE 和 FILE_MAP_ALL_ACCESS),显然第二个进程将具有写权限。
我需要使用访问值 PAGE_READONLY 和 FILE_MAP_READ 在进程 (1) 中创建共享内存块,但显然我不允许在进程 (1) 中初始化/设置/修改内存块,这比无用的内存缓冲区。
据我所知,安全属性的定义不能解决问题,因为我的问题不依赖于用户或组。
我什至会对这样的解决方案感到满意)。
【问题讨论】:
标签: c++ windows shared-memory readonly protected