【发布时间】:2015-11-17 08:37:21
【问题描述】:
在 Windows 上,如何在进程之间共享已分配的未命名内存?
上下文:
我想从两个不同的进程访问相同的物理内存,而其中一个进程“不知道”它。基本上,我想从进程 B 中读取进程 A 的内存。
我想过 ReadProcessMemory() 但是,根据我的理解(我可能错了,如果我错了,请告诉我),ReadProcessMemory 实际上将内存从一个物理地址复制到另一个,然后将复制映射到进程 B 的虚拟内存(或者把它放在已经映射的区域,没关系)。
我希望能够从两个进程映射相同的物理区域。我考虑过 CreateFileMapping()/MapViewOfFile(),但是(再次,据我了解)您需要明确命名要映射的区域。我没有进程 A 的内存的名称,我只知道进程 A 的该内存的虚拟地址(来自 VirtualQueryEx() )。在我看来,我相信这应该足以完成工作,但我还没有找到方法。有什么建议吗?
编辑:我应该明确表示我不想分享一个单词或一些小东西,而是一组虚拟页面,所以偏移量和类似物不是问题。
【问题讨论】:
-
这在最新版本的 Windows 10 中现在可以通过使用
MEM_RESERVE_PLACEHOLDER标志调用VirtualAlloc2来实现。然后使用MEM_REPLACE_PLACEHOLDER调用MapViewOfFile3。但是,示例代码很简单。