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


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

См. также

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFile

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

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

VirtualQueryEx

API Vertdll, доступные в анклавах VBS