Функция 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 будет по-прежнему передавать такие страницы, как 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 |