Функция VirtualQuery(…) позволяет запрашивать определенную информацию (например, размер, тип памяти, атрибуты защиты) об участке памяти по заданному адресу. Эта функция имеет следующее описание:
DWORD VirtualQuery(
LPCVOID lpAddress, // address of region
PMEMORY_BASIC_INFORMATION lpBuffer, // address of information buffer
DWORD dwLength // size of buffer
);
При вызове VirtualQuery() первый параметр lpAddress должен содержать адрес виртуальной памяти, о котором необходимо получить информацию.
Параметр lpBuffer – адрес структуры MEMORY_BASIC_INFORMATION, которую надо создать перед вызовом функции. Данная структура определена в файле WINNT.H: и имеет следующее описание:
typedef struct _MEMORY_BASIC_INFORMATION { // mbi
PVOID BaseAddress; // base address of region
PVOID AllocationBase; // allocation base address
DWORD AllocationProtect; // initial access protection
DWORD RegionSize; // size, in bytes, of region
DWORD State; // committed, reserved, free
DWORD Protect; // current access protection
DWORD Type; // type of pages
} MEMORY_BASIC_INFORMATION;
Параметр dwLength задает размер структуры MEMORY_BASIC_ INFORMATION. VirtualQuery() возвращает число байт, скопированных в буфер.
Пользуясь адресом, указанным в параметре lpAddress, функция заполняет эту структуру информацией о диапазоне смежных страниц, имеющих одинаковое состояние, атрибуты защиты и тип. Описание элементов структуры приведено в табл.1:
Таблица 1
|