VirtualQuery дает недопустимый результат. Это ошибка?

Мой код:

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

Результаты, достижения:

   meminf:
    BaseAddress 0x40001000 void *
    AllocationBase 0x00000000 void *
    AllocationProtect 0x00000000 без знака долго
    RegionSize           0x0de0f000 без знака долго
    Состояние 0x00010000 без знака long
    Защищать 0x00000001 без знака долго
    Тип 0x00000000 без знака long

Заметки:

(1) AllocationBase имеет значение NULL, а BaseAddress не равно NULL.
(2) AllocationProtect равно 0 (не значение защиты)

Это ошибка VirtualQuery?

2 ответа

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

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

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

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

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

Другие вопросы по тегам