我的代码:
MEMORY_BASIC_INFORMATION meminf;
::VirtualQuery(box.pBits, &meminf, sizeof(meminf));
结果:
meminf: BaseAddress 0x40001000 void * AllocationBase 0x00000000 void * AllocationProtect 0x00000000 unsigned long RegionSize 0x0de0f000 unsigned long State 0x00010000 unsigned long Protect 0x00000001 unsigned long Type 0x00000000 unsigned long
注意:
(1)AllocationBase为NULL,而BaseAddress不为NULL (2)AllocationProtect为0(不是保护值)
这是VirtualQuery的错误吗?
答案 0 :(得分:1)
将内核模式指针传递给此函数可能导致不返回任何信息。 检查返回值。
答案 1 :(得分:1)
这不是错误。 documentation of VirtualQuery()
州:
返回值是信息缓冲区中返回的实际字节数。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。可能的错误值包括ERROR_INVALID_PARAMETER。
在使用结构中的数据之前检查函数结果是否等于sizeof(meminf)
,或者使用将使后面的代码做正确的值的结构初始化结构。如果函数返回0没有数据被复制到结构中,那么它仍将包含之前的任何数据。如果没有初始化,这将是堆栈上的随机字节。