2

我的代码:

MEMORY_BASIC_INFORMATION meminf;
::VirtualQuery(box.pBits, &meminf, sizeof(meminf));

结果:

   记忆:
    基址 0x40001000 无效 *
    AllocationBase 0x00000000 无效 *
    AllocationProtect 0x00000000 无符号长
    RegionSize 0x0de0f000 无符号长
    状态 0x00010000 无符号长
    保护 0x00000001 unsigned long
    类型 0x00000000 无符号长

笔记:

(1) AllocationBase 为 NULL 而 BaseAddress 不为 NULL
(2) AllocationProtect 为 0(不是保护值)

它是 VirtualQuery 的错误吗?

4

2 回答 2

1

Passing a kernel-mode pointer to this function can result in no information being returned. Check the return value.

于 2009-12-21T13:35:48.333 回答
1

这不是错误。国家的文件VirtualQuery()

返回值是信息缓冲区中返回的实际字节数。

如果函数失败,则返回值为零。要获取扩展错误信息,请调用 GetLastError。可能的错误值包括 ERROR_INVALID_PARAMETER。

在使用结构中的数据之前检查函数结果是否相等sizeof(meminf),或者使用将使后面的代码执行正确操作的值初始化结构。如果函数返回 0,则没有数据被复制到结构中,因此它仍将包含以前在其中的任何数据。如果没有初始化,这将是堆栈上的随机字节。

于 2010-03-12T23:06:39.247 回答