VirtualQuery дает недопустимый результат. Это ошибка? - PullRequest
2 голосов
/ 05 октября 2009

Мой код:

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?

Ответы [ 2 ]

1 голос
/ 13 марта 2010

Это не ошибка. Документация VirtualQuery() гласит:

Возвращаемым значением является фактическое количество байтов, возвращаемых в информационном буфере.

Если функция не работает, возвращаемое значение равно нулю. Чтобы получить расширенную информацию об ошибке, вызовите GetLastError. Возможные значения ошибок: ERROR_INVALID_PARAMETER.

Проверьте, чтобы результат функции был равен sizeof(meminf) перед использованием данных в структуре, или инициализируйте структуру значениями, которые приведут к тому, что следующий код будет работать правильно. Если функция вернула 0, данные не были скопированы в структуру, поэтому она все равно будет содержать те данные, которые были в ней ранее. Без инициализации это будут случайные байты в стеке.

1 голос
/ 21 декабря 2009

Передача указателя режима ядра этой функции может не дать никакой информации. Проверьте возвращаемое значение.

...