Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС СФМЭИ.doc
Скачиваний:
22
Добавлен:
17.09.2019
Размер:
1.37 Mб
Скачать

6.2.4. Получение информации о модулях

Для просмотра списка загруженных модулей определены следующие функции:

  • Module32First - получение информации о первом модуле выбранного процесса. Процесс определяется по идентификатору;

  • Module 32Next - получение информации об очередном модуле выбранного. Процесс определяется по идентификатору.

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

function Module32First(hSnapshot: THandle; var lpme: TModuleEntry32): Boolean;

где

hSnapshot – дескриптор «мгновенного снимка», полученный с помощью функции CreateToolhelp32SnapShot;

lpme – указатель на структуру TModuleEntry32.

Структура TModuleEntry32 состоит из следующих полей:

TMODULEENTRY32 = record

dwSize: DWORD; th32ModuleID: DWORD; th32ProcessID: DWORD;

GlblcntUsage: DWORD; ProccntUsage: DWORD;

modBaseAddr: PBYTE; modBaseSize: DWORD; hModule: HMODULE;

szModule: array[0..MAX_MODULE_NAME32] of Char;

szExePath: array[0..MAX_PATH - 1] of Char;

end;

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

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

Поле

Описание

dwSize

Размер структуры TModuleEntry32 в байтах. Перед вызовом функции Module32First установите это значение с помощью функции sizeof(TMODULEENTRY32)

th32ModuleID

Идентификатор модуля. Это значение имеет смысл только для функций ToolHelp и не может использоваться функциями Win32

th32ProcessID

Идентификатор процесса

GlblcntUsage

Счетчик ссылок на данный модуль в системе в целом

ProccntUsage

Счетчик ссылок на данный модуль в контексте процесса (Идентификатор процесса указывается в поле th32ProcessID)

modBaseAddr

Базовый адрес модуля в контексте данного процесса

modBaseSize

Размер модуля в байтах

hModule

Дескриптор модуля в контексте выбранного процесса

szModule

Строка, содержащая имя модуля

szExePath:

Строка, содержащая путь к модулю

Функция Module32First возвращает значение TRUE, если информация о первом модуле получена и FALSE – в противном случае.

Функция Module32Next имеет те же параметры, что и функция Module32First.

6.2.5. Информация о кучах (heap)

Для просмотра куч определены следующие функции:

  • Heap32ListFirst - информация о куче, предоставляемой выбранному процессу по умолчанию;

  • Heap32ListNext - информация об очередной куче процесса;

  • Heap32First - информация о первом блоке в выбранной куче;

  • Heap32Next - информация об очередной блоке в выбранной куче.

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

function Heap32ListFirst(hSnapshot: THandle; var lphl: THeapList32): Boolean;

где

hSnapshot – дескриптор «мгновенного снимка», полученный с помощью функции CreateToolhelp32SnapShot;

lphl – указатель на структуру THeapList32.

Структура THeapList32 состоит из следующих полей:

THEAPLIST32 = record

dwSize: DWORD; th32ProcessID: DWORD;

th32HeapID: DWORD; dwFlags: DWORD;

end;

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

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

Поле

Описание

dwSize

Размер структуры THeapList32 в байтах. Перед вызовом функции Heap32ListFirst установите это значение с помощью функции sizeof(THEAPLIST32)

th32ProcessID

Идентификатор процесса-владельца данной кучи

th32HeapID

Идентификатор кучи в контексте процесса. Это значение имеет смысл только для функций ToolHelp и не может использоваться функциями Win32

dwFlags

В этом поле может быть записана константа HF32_DEFAULT, что означает – куча, предоставляемая процессу по умолчанию

Функция Heap32ListFirst возвращает значение TRUE, если информация о первой куче получена и FALSE – в противном случае.

Функция Heap32ListNext имеет те же параметры, что и функция Heap32ListFirst.

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

function Heap32First(var lphe: THeapEntry32; th32ProcessID, th32HeapID: DWORD): Boolean;

где

lphe – адрес буфера, содержащего структуру THeapEntry32;

th32ProcessID – идентификатор процесса, в контексте которого создана куча;

th32HeapID – идентификатор кучи – владелицы блока. Данный идентификатор может быть получен с помощью функций Heap32ListFirst или Heap32ListNext.

Структура THeapEntry32 состоит из следующих полей:

THEAPENTRY32 = record

dwSize: DWORD; hHandle: THandle; dwAddress: DWORD;

dwBlockSize: DWORD; dwFlags: DWORD; dwLockCount: DWORD;

dwResvd: DWORD; th32ProcessID: DWORD; th32HeapID: DWORD;

end;

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

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

Поле

Описание

dwSize

Размер структуры THeapEntry32 в байтах. Перед вызовом функции Heap32First установите это значение с помощью функции sizeof(THEAPENTRY32)

hHandle

Дескриптор блока кучи

dwAddress

Линейный виртуальный адрес начального блока кучи

dwBlockSize

Размер блока кучи в байтах

dwFlags

Флаги. Возможны следующие значения:

LF32_FIXED – зарезервирован, но ему не выделена физическая память

LF32_FREE – блок памяти не используется (свободен)

LF32_MOVEABLE – блоку памяти выделена физическая память

dwLockCount

Счетчик обращений к данному блоку

dwResvd

Зарезервировано. Не используется

th32ProcessID

Идентификатор процесса – владельца кучи, в которую входит данный блок

th32HeapID

Идентификатор кучи, в состав которой входит данный блок

Функция Heap32First возвращает значение TRUE, если информация о первом блоке в куче получена и FALSE – в противном случае.

Функция Heap32tNext имеет те же параметры, что и функция Heap32ListFirst.