VirtualQueryEx的dwLength参数的目的是什么?

时间:2014-07-25 17:47:24

标签: c windows winapi

VirtualQueryEx的dwLength参数的用途是什么? Here它的描述如下:

  

lpBuffer [out]指向MEMORY_BASIC_INFORMATION结构的指针   返回有关指定页面范围的信息。

     

dwLength [in] lpBuffer指向的缓冲区大小   参数,以字节为单位。

是否有任何理由除了sizeof(MEMORY_BASIC_INFORMATION)之外还使用其他任何内容?

1 个答案:

答案 0 :(得分:5)

  1. 与Windows API一样,size字段用于结构版本控制。未来版本的Windows可以为更大的结构提供更多信息的附加信息,以便了解新功能而不会破坏与旧应用程序的二进制兼容性。

  2. 还有一个更有趣的用例:当前的Windows版本允许32位和64位进程在同一台机器上共存。每个进程都获得具有正确数据类型大小和API的API。但是,如果64位进程(比如说调试器)想要弄乱32位进程的内存页面或反之亦然会发生什么?在这种情况下,它不能使用“常规”MEMORY_BASIC_INFORMATION结构 - 这是适合其“位数”的结构的别名,但必须使用适合目标进程的版本(参见here,在底部这页纸)。在这种情况下,VirtualQueryEx可以使用大小信息来检查调用者是否提供了正确的结构,并提供错误而不是写入错误的内存。