Функция 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 мегабайт (МБ), а VirtualQuery вызывается на странице с размером 10 МБ в регионе, функция получит состояние MEM_FREE и размер 30 МБ.
Если общая страница копирования на записи изменена, она становится закрытой для процесса, изменяющего страницу. Однако функция VirtualQuery продолжит сообщать такие страницы, как MEM_MAPPED (для представлений данных) или MEM_IMAGE (для представлений исполняемых изображений), а не MEM_PRIVATE. Чтобы определить, произошла ли операция копирования на определенной странице, откройте страницу или заблокируйте ее с помощью функции VirtualLock, чтобы убедиться, что страница находится в памяти, а затем используйте функцию QueryWorkingSetEx, чтобы проверить общий бит в расширенном рабочем наборе данных для страницы. Если общий бит ясно, страница является частной.
Эта функция сообщает о регионе страниц в памяти вызывающего процесса, а функция VirtualQueryEx сообщает о регионе страниц в памяти указанного процесса.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [классические приложения | Приложения UWP] |
минимальный поддерживаемый сервер | Windows Server 2003 [классические приложения | Приложения UWP] |
целевая платформа | Виндоус |
заголовка | memoryapi.h (включая Windows.h, Memoryapi.h) |
библиотеки | onecore.lib |
DLL | Kernel32.dll |