Функция VIrtualquery – Вывод информации об участке памяти по заданному адресу. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функция VIrtualquery – Вывод информации об участке памяти по заданному адресу.



Функция имеет следующий вид:

function VirtualQuery(lpAddress: Pointer; var lpBuffer: MemoryBasicInformation; dwLength: DWORD): DWORD; stdcall;

Параметры данной функции приведены в таблице 2.3

 

Таблица 2.3 Параметры функции VirtualQuery

Наименование параметра Описание
lpAddress Адрес виртуально памяти, о котором следует получить информацию
lpBuffer Адрес структуры MEMORY_BASIC_INFORMATION
dwLength Размер структуры MEMORY_BASIC_INFORMATION

 

При вызове данная функция заполняет структуру MEMORY_BASIC_INFORMATION, которая состоит из следующих полей:

_MEMORY_BASIC_INFORMATION = record

BaseAddress: Pointer; AllocationBase: Pointer;

AllocationProtect: DWORD; RegionSize: DWORD;

State: DWORD; Protect: DWORD; Type: DWORD;

end;

Описание полей структуры MEMORY_BASIC_INFORMATION приведены в таблице 2.4.

Функция VirtualQuery возвращает количество байт, записываемых в структуру MEMORY_BASIC_INFORMATION.

Таблица 2.4 Описание полей структуры MEMORY_BASIC_INFORMATION

Наименование поля Описание
   
BaseAddress Сообщает то же значение, что и параметр lpAddress, но округленное до ближайшего меньшего адреса, кратного размеру страницы
AllocationBase Идентифицирует базовый адрес региона, включающего в себя адрес, указанный в параметре lpAddress
AllocationProtect Идентифицирует атрибут защиты, присвоенный региону при его резервировании
RegionSize Сообщает суммарный размер (в байтах) группы страниц, которые начинаются с базового адреса BaseAddress и имеют те же атрибуты защиты, состояние и тип, что и страница, расположенная по адресу, указанному в параметре lpAddress

Продолжение таблицы 2.4

   
State Сообщает состояние (MEM_FREE, MEM_RESERVE или MEM_COMMIT) всех смежных страниц, которые имеют те же атрибуты защиты, состояние и тип, что и страница, расположенная по адресу, указанному в параметре lpAddress
Protect Идентифицирует атрибут защиты (PAGE_*) всех смежных страниц, которые имеют те же атрибуты защиты, состояние и тип, что и страница, располо-женная по адресу, указанному в параметре lpAddress
Type Идентифицирует тип физической памяти, (MEM_IMAGE, MEM_MAPPED или MEM_PRIVATE), связанной с группой смежных страниц, которые имеют те же атрибуты защиты, состояние и тип, что и страница, расположенная по адресу, указанному в параметре lpAddress. Подробное описание возможных типов физической памяти приведено в таблице 2.5.

 

Таблица 2.5 Описание типов физической памяти

Наименование типа Описание
MEM_PRIVATE Этот диапазон виртуальных адресов сопоставлен со страничным файлом.
MEM_IMAGE Этот диапазон виртуальных адресов первоначально был сопоставлен с образом EXE- или DLL-файла, проецируемого в память, но в настоящий момент возможно уже нет. Например, при записи в глобальную переменную механизм поддержки «копирования при записи» выделяет соответствующую страницу памяти из страничного файла.
MEM_MAPPED Этот диапазон виртуальных адресов первоначально был сопоставлен с файлом данных, проецируемым в память, но в настоящий момент возможно уже нет. Например, файл данных мог быть спроецирован с использованием механизма поддержки «копирования при записи». Любые операции записи в этот файл приведут к тому, что соответствующие страницы памяти будут выделены из страничного файла, а не из исходного файла данных.

Для просмотра информации о памяти в любом другом процессе используется функция VirtualQueryEx:

function VirtualQueryEx(hProcess: THandle; lpAddress: Pointer; var lpBuffer: TMemoryBasicInformation; dwLength: DWORD): DWORD; stdcall;

Функция VirtualQueryEx отличается от парной функции VirtualQuery наличием параметра hProcess, который представляет собой дескриптор того процесса, информацию о памяти которого требуется получить. Алгоритм определения дескриптора любого процесса будет рассмотрен в лабораторной работе № 6.



Поделиться:


Последнее изменение этой страницы: 2017-02-06; просмотров: 1183; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.202.187 (0.004 с.)