1

我想做的是将特定的内存区域标记为在同一图像/二进制文件的进程之间自动共享,类似于 __declspec(allocate)... 和 __pragma(section...)。

我知道我可以使用名称管道或等效的,但为此我想避免系统调用或额外的开销。我只是不确定是否有任何方法可以通知 NT 内核为图像的每个进程自动映射特定范围的页面。我在 MSDN 上没有找到任何东西,尽管 MSDN 不包括未记录的功能(根据定义),我可以很好地使用它。

我也没有看到任何特定的 PE 部分名称/标志可以表明这一点,尽管我可能遗漏了一些东西。

Ed:我注意到实际上有一个 PE 部分标志 IMAGE_SCN_MEM_SHARED,但我需要研究它是如何工作的。

4

1 回答 1

2

您可以在共享内存段中使用#pragma comment(linker, "/SECTION:.shared,RWS")#pragma data_seg(".shared")声明事物(仅适用于 Visual Studio)。请参阅在 Win32 可执行文件之间共享变量

否则,如果这不是您的选择,那么在进程之间共享内存的唯一其他方法是通过CreateFileMapping()和使用内存映射文件MapViewOfFile/Ex()。请参阅创建命名共享内存

于 2018-09-13T15:52:35.017 回答