【问题标题】:Determine which process created shared memory in Windows确定 Windows 中哪个进程创建了共享内存
【发布时间】:2025-12-02 07:00:01
【问题描述】:

我正在处理的系统有许多正在运行的进程。在共享内存的上下文中,有些是服务器,有些是客户端。

他们通过CreateFileMappingMapViewOfFile创建/访问共享内存。

我最近更改了其中一个客户端的结构,这导致客户端尝试映射一个比服务器进程创建的更大的共享内存区域。结果是拒绝访问。

我的问题是,我不知道最初是哪个进程创建了内存。有没有办法访问这些关于共享内存的元信息以确定需要重新编译哪个服务器程序?

确认是 MapViewOfFile 失败,错误代码为 5:访问被拒绝。

【问题讨论】:

    标签: winapi shared-memory


    【解决方案1】:

    存在两种类型的共享内存:动态(使用 CreateFileMapping...您的场景)和静态(在 PE 部分特性中声明的内存映射)。可以在文件和进程级别测试具有共享内存特征的 PE 部分的存在。

    另一方面,MapViewOfFile 失败的原因可能不是映射内存的大小不同(例如凭据、内存偏移量......)

    【讨论】: