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


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

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

Синтаксис

SIZE_T VirtualQueryEx(
  [in]           HANDLE                    hProcess,
  [in, optional] LPCVOID                   lpAddress,
  [out]          PMEMORY_BASIC_INFORMATION lpBuffer,
  [in]           SIZE_T                    dwLength
);

Параметры

[in] hProcess

Дескриптор для процесса, сведения о памяти которого запрашиваются. Дескриптор должен быть открыт с правом доступа PROCESS_QUERY_INFORMATION , что позволяет использовать дескриптор для чтения сведений из объекта процесса. Дополнительные сведения см. в разделе Управление правами на доступ и безопасность процесса.

[in, optional] lpAddress

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

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

[out] lpBuffer

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

[in] dwLength

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

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

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

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

Комментарии

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

  • Состояние всех страниц одинаково (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).
Функция VirtualQueryEx определяет атрибуты первой страницы в регионе, а затем сканирует последующие страницы, пока не проверит весь диапазон страниц или пока не обнаружит страницу с несовпадющим набором атрибутов. Функция возвращает атрибуты и размер области страниц с соответствующими атрибутами в байтах. Например, если имеется область свободной памяти размером 40 МБ , а на странице, которая находится в 10 МБ, функция получит состояние MEM_FREE и размер 30 МБ.

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

Требования

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

См. также

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFileEx

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

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

VirtualAllocEx

VirtualProtectEx