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, данные не были скопированы в структуру, поэтому она все равно будет содержать все данные, которые были в ней ранее. Без инициализации это будут случайные байты в стеке.