Функция 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 |