监控对内存映射文件的访问(由页面文件支持)

监控对内存映射文件的访问(由页面文件支持)

有人能指出一个(或多个)工具来监视 Windows 系统上对内存映射文件的访问吗?

Sysinternals/Microsoft 的 Procmon 显然不适合这个任务。它似乎无法监视由页面文件本身支持的操作。

更新:我的问题不是关于各种分配方法的数量/分布。我对一个(或多个)工具感兴趣,这些工具可以向我展示 MMF 的访问权限(主要是开立/创建/关闭)。

答案1

正如您所注意到的,在进程之间共享内存时,没有提供广告/使用资源的规定。因此,除了设置共享地址区域外,您可能还需要设置某种带外协商基础设施。

显而易见的选择是创建一个 Win32 共享/命名互斥锁也是为了协调事物。發行人进程可以创建同步对象,然后有效地等待它(即不旋转,因为它是一个Kernel32原始对象),直到呼叫者进程连接并释放服务器。

这相当于向服务器发出“推送”通知,让一切顺利进行;通常这仅用于初始化目的,在此期间,客户端/服务器配对会建立(未发布的)私人连接(如果需要),以持续整个会话的生命周期。如果设计预期带宽属于某种类型,它们甚至可能通过在CMPXCHG共享内存上建立无锁异步链接,但任何信号机制都可以工作,包括每个机制都提供互斥锁供彼此使用。

因此,虽然命名管道具有“内置”的设置/拆卸过程,但共享内存的缺点是您必须自己拥有。但您肯定拥有自己调度所需的一切,而优点是您可以来回共享内存块,而不必弄清楚如何将所有内容序列化到管道中。

实际上,在客户端调用之前,您可能根本不需要创建共享内存,此时客户端或服务器将映射一段新的共享内存供它们之间私用。您在这里的观点是完全避免使用命名管道,然后弄清楚如何传达(公认最少的)设置信息——即单词至少,该块的内存地址——将留给读者作为练习。这是一个引导谜题(或者如果你愿意的话,也可以叫它鸡生蛋还是蛋生鸡的问题)。

答案2

这可能已经得到解答这里使用 sysinternals vmmap。看看它是否适合您的需求。

相关内容