【发布时间】:2022-12-18 23:18:30
【问题描述】:
在寻找查询有关 Windows 中一系列页面的特定信息的方法时,我遇到了两种常用的解决方案。然而,这两种选择似乎返回重叠信息。
虚拟查询Ex
在 MSDN 上我们看到它使用参数 hProcess、lpAddress、lpBuffer 和 dwLength 来查询该页面范围的信息。它返回 this 结构,它告诉我们一些关于页面状态、保护和类型的信息。哦,这样查询页面信息是个不错的选择吧?但是等等还有更多!
查询虚拟内存信息
也可以在MSDN 上找到并且确实几乎同样的事情。不同之处在于它使用DUMMYSTRUCTNAME 并返回一个与 VirtualQueryEx 返回的结构完全重叠的内存结构。
看起来这可能是一种疏忽,使用哪个并不重要。也许 MS 自己甚至不知道为什么在一个操作系统中有两个重叠的变体。但是对于确实知道的人来说:这里有什么区别?
【问题讨论】:
-
您是否注意到第一个是旧的,自 Windows XP 以来就存在,而第二个是较新的,自 Windows 10 以来就存在?
-
QueryVirtualMemoryInformation是一个新的 API 并且是可扩展的:可以添加新的 MemoryInformationClass 类型以在将来返回更多/附加数据而不会破坏合同。 -
一旦只有 VirtualQuery(),他们就会对其进行扩展,这样您就可以使用 VirtualQueryEx() 在另一个进程中四处寻找。然后他们扩展了它,他们可以称它为 VirtualQueryExEx()。 the NLS team中常见的一种做法。但他们没有,前缀“查询”似乎是新方法。使用您需要的那个。