winapi - 在保持相同地址的同时重新映射 MapViewOfFile
问题描述
我希望解决的基本问题是拥有两个由物理内存(即 VirtualAlloc)支持的虚拟内存区域,以及“指向”另外两个虚拟内存区域之一的第三个虚拟内存区域。
虽然我相信您可以使用 MapViewOfFileEx 映射两个支持的内存区域之一,但我找不到任何方法来确保在将映射从一个区域更改为另一个区域时不会被盗。
我最初的想法是使用 MEM_RESERVE 来 VirtualAlloc,但是 MapViewOfFileEx 不能使用保留的内存。
我相信我可以在 posix 上使用 shm_open 和 family 完成同样的事情,因为 mmap 可以覆盖映射区域。
解决方案
如果地址正在使用中,则不能直接覆盖该地址。
要使用相同的地址 ( mappedAddress
),您需要UnmapViewOfFile
在重新映射之前调用。像这样的东西:
HANDLE targetFile = CreateFile(L"target.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
HANDLE fileMap = CreateFileMapping(targetFile, 0, PAGE_READWRITE, 0, 10, L"myTestMap");
LPVOID mappedAddress = MapViewOfFileEx(fileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0, 0);
BOOL result = UnmapViewOfFile(mappedAddress); // Get the address.
HANDLE targetFile2 = CreateFile(L"target2.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
HANDLE fileMap2 = CreateFileMapping(targetFile2, 0, PAGE_READWRITE, 0, 10, L"myTestMap2");
LPVOID mappedAddress2 = MapViewOfFileEx(fileMap2, FILE_MAP_ALL_ACCESS, 0, 0, 0, mappedAddress); // Use the same address.
推荐阅读
- docker - Docker ARG 变量不起作用(始终为空)
- javascript - 根据转换后的值从输入数组中查找唯一值
- python - Python glob.glob 函数未执行
- powerquery - 如何处理 PowerQuery 函数中的错误
- vba - 变量不存在但编译有效,运行时失败
- solr - 默认运算符 AND 在 Coldfusion 上使用 SOLR
- r - 向ggmap绘图添加指北针和比例尺
- javascript - 清除 Discord.js
- performance - 资产管理 - 基于资产(SPEED CAMERA POSITION API)
- python - openCV缺陷检测问题(如何让边框整齐?)