Поделиться через


Функция VirtualQuery (memoryapi.h)

Извлекает сведения о диапазоне страниц в виртуальном адресном пространстве вызывающего процесса.

Чтобы получить сведения о диапазоне страниц в адресном пространстве другого процесса, используйте функцию VirtualQueryEx .

Синтаксис

SIZE_T VirtualQuery(
  [in, optional] LPCVOID                   lpAddress,
  [out]          PMEMORY_BASIC_INFORMATION lpBuffer,
  [in]           SIZE_T                    dwLength
);

Параметры

[in, optional] lpAddress

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

Если lpAddress указывает адрес, превышающий максимальный адрес памяти, доступный процессу, функция завершается сбоем с ERROR_INVALID_PARAMETER.

[out] lpBuffer

Указатель на структуру MEMORY_BASIC_INFORMATION , в которой возвращаются сведения об указанном диапазоне страниц.

[in] dwLength

Размер буфера, на который указывает параметр lpBuffer , в байтах.

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

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

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

Комментарии

VirtualQuery предоставляет сведения о регионе последовательных страниц, начиная с указанного адреса, которые имеют следующие атрибуты:

  • Состояние всех страниц одинаково (MEM_COMMIT, MEM_RESERVE, MEM_FREE, MEM_PRIVATE, MEM_MAPPED или MEM_IMAGE).
  • Если начальная страница не является бесплатной, все страницы в регионе являются частью одного начального выделения страниц, созданных одним вызовом VirtualAlloc, MapViewOfFile или одной из следующих расширенных версий этих функций: VirtualAllocEx, VirtualAllocExNuma, MapViewOfFileEx,MapViewOfFileExNuma.
  • Доступ ко всем страницам одинаков (PAGE_READONLY, PAGE_READWRITE, PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD или PAGE_NOCACHE).

Функция определяет атрибуты первой страницы в регионе, а затем сканирует последующие страницы, пока не проверит весь диапазон страниц или не обнаружит страницу с несовпадующим набором атрибутов. Функция возвращает атрибуты и размер области страниц с соответствующими атрибутами в байтах. Например, если есть область свободной памяти размером 40 мегабайт (МБ ) и на странице, которая находится в 10 МБ, функция получит состояние MEM_FREE и размер 30 МБ.

При изменении общей страницы копирования при записи она становится закрытой для процесса, который изменил страницу. Однако функция VirtualQuery будет по-прежнему сообщать о таких страницах, как MEM_MAPPED (для представлений данных) или MEM_IMAGE (для представлений исполняемых изображений), а не MEM_PRIVATE. Чтобы определить, произошло ли копирование при записи для определенной страницы, получите доступ к странице или заблокируйте ее с помощью функции VirtualLock, чтобы убедиться, что страница находится в памяти, а затем используйте функцию QueryWorkingSetEx, чтобы проверка бит Общий в расширенном рабочем наборе для страницы. Если бит Общего доступа не задан, страница является частной.

Эта функция сообщает о области страниц в памяти вызывающего процесса, а функция VirtualQueryEx — о области страниц в памяти указанного процесса.

Требования

Требование Значение
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header memoryapi.h (включая Windows.h, Memoryapi.h)
Библиотека onecore.lib
DLL Kernel32.dll

См. также

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFile

Функции управления памятью

Функции виртуальной памяти

VirtualQueryEx

API-интерфейсы Vertdll, доступные в анклавах VBS