Функция NtQueryVirtualMemory (ntifs.h)

Подпрограмма NtQueryVirtualMemory определяет состояние, защиту и тип области страниц в виртуальном адресном пространстве указанного процесса.

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtQueryVirtualMemory(
  [in]            HANDLE                   ProcessHandle,
  [in, optional]  PVOID                    BaseAddress,
  [in]            MEMORY_INFORMATION_CLASS MemoryInformationClass,
  [out]           PVOID                    MemoryInformation,
  [in]            SIZE_T                   MemoryInformationLength,
  [out, optional] PSIZE_T                  ReturnLength
);

Параметры

[in] ProcessHandle

Дескриптор для процесса, в контексте которого находятся страницы для запроса. Используйте макрос NtCurrentProcess , чтобы указать текущий процесс.

[in, optional] BaseAddress

Базовый адрес области запрашиваемых страниц. Это значение округляется до следующей границы адреса страницы узла.

[in] MemoryInformationClass

Класс сведений о памяти, о котором требуется извлечь информацию. В настоящее время единственным поддерживаемым значением MEMORY_INFORMATION_CLASS является MemoryBasicInformation.

[out] MemoryInformation

Указатель на буфер, который получает указанные сведения. Формат и содержимое буфера зависят от класса информации, указанного в параметре MemoryInformationClass . При передаче значения MemoryBasicInformation в MemoryInformationClass значение параметра MemoryInformation является MEMORY_BASIC_INFORMATION структурой.

[in] MemoryInformationLength

Указывает длину (в байтах) буфера, на который указывает MemoryInformation .

[out, optional] ReturnLength

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

Возвращаемое значение

Возвращает STATUS_SUCCESS, если вызов выполнен успешно. Если вызов завершается ошибкой, возможны следующие коды ошибок:

Код возврата Описание
STATUS_ACCESS_DENIED У вызывающего объекта недостаточно прав доступа для выполнения запрошенного действия.
STATUS_ACCESS_VIOLATION Указанный базовый адрес является недопустимым виртуальным адресом.
STATUS_INFO_LENGTH_MISMATCH Буфер MemoryInformation больше, чем MemoryInformationLength.
STATUS_INVALID_INFO_CLASS Указанный параметр MemoryInformationClass недопустим.
STATUS_INVALID_PARAMETER Указанный базовый адрес выходит за пределы диапазона доступных адресов.

Комментарии

ZwQueryVirtualMemory определяет состояние первой страницы в регионе, а затем сканирует последующие записи в схеме адресов процесса от базового адреса вверх до тех пор, пока не будет отсканирован весь диапазон страниц или пока не будет обнаружена страница с несовпадающим набором атрибутов. Возвращаются атрибуты региона, длина области страниц с соответствующими атрибутами и соответствующее значение состояния.

Если вся область страниц не имеет соответствующего набора атрибутов, то подрегионы в одном резервировании адресов будут возвращены по отдельности. Они будут иметь одно и то же значение *MemoryInformation.AllocationBase , их отдельные размеры будут находиться в *MemoryInformation.RegionSize, а общий размер резервирования адресов можно получить, суммируя все значения *MemoryInformation.RegionSize , связанные с определенным значением *MemoryInformation.AllocationBase .

NtQueryVirtualMemory и ZwQueryVirtualMemory — это две версии одной и той же подпрограммы windows Native System Services.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.

Требования

Требование Значение
Минимальная версия клиента Windows 2000
Целевая платформа Универсальное
Верхняя часть ntifs.h
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe

См. также раздел

MEMORY_BASIC_INFORMATION

MEMORY_INFORMATION_CLASS

POWER_PLATFORM_INFORMATION

ZwQueryVirtualMemory