小编use*_*346的帖子

windows - 受保护的共享内存

我正在寻找一种在 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...
Run Code Online (Sandbox Code Playgroud)

这两行代码可以应用于两个进程,因为第一个进程创建共享内存块,第二个进程只是打开共享内存。但是,显然,由于在创建内存块期间提供的访问值(PAGE_READWRITE 和 FILE_MAP_ALL_ACCESS),第二个进程将具有写入权限。

我需要通过使用访问值 PAGE_READONLY 和 FILE_MAP_READ 在进程(1)中创建共享内存块,但显然我不允许初始化/设置/修改进程(1)中的内存块,这是一个无用的内存缓冲区。

据我所知,安全属性的定义无法解决问题,因为我的问题不依赖于用户或组。

我什至对这样的解决方案感到满意,该解决方案在进程(1)中创建共享内存块,依赖于创建共享内存块之前已知的内存内容(并且之后不会在进程(1)中修改)。

c++ windows protected readonly shared-memory

5
推荐指数
1
解决办法
2502
查看次数

标签 统计

c++ ×1

protected ×1

readonly ×1

shared-memory ×1

windows ×1