【问题标题】:VirtualQuery gives illegal result. Is it a bug?VirtualQuery 给出非法结果。它是一个错误吗?
【发布时间】:2009-10-05 10:52:52
【问题描述】:

我的代码:

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的bug吗?

【问题讨论】:

    标签: virtualquery


    【解决方案1】:

    这不是错误。 documentation of VirtualQuery() 声明:

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

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

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

    【讨论】:

      【解决方案2】:

      将内核模式指针传递给此函数可能会导致不返回任何信息。 检查返回值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-04
        • 2018-12-27
        • 1970-01-01
        • 2023-03-25
        • 2014-09-16
        • 1970-01-01
        • 2011-11-15
        • 2019-02-06
        相关资源
        最近更新 更多