Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Обработка информации о модулях





Опрос модулей выполняется практически так же, как опрос процессов или потоков. Для этого в Тоо1Не1р32 предусмотрены две функции: Module32First() и Module32Next(), кото­рые определяются следующим образом:

function Module32First(hSnapshot: THandle; var lpme: TModuleEntry32): BOOL; stdcall;

function Module32Next(hSnapshot: THandle; var lpme: TModuleEntry32): BOOL; stdcall;

Первым параметром в обеих функциях является дескриптор снимка, а вторым var-параметром — запись TModuleEntry32. Ее определение имеет следующий вид:

tуре

TModuleEntry32 = record

dwSize: DWORD;

th32ModuleID: DWORD;

th32ProcessID: DWORD;

GlblcntUsage: DWORD;

ProccntUsage: DWORD;

modBaseAddr: РВУТЕ;

modBaseSize: DWORD;

hModule: HMODULE;

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

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

end;

· Поле dwSize определяет размер записи и поэтому должно быть инициализировано значением SizeOf (TModuleEntry32) до использования этой записи.

· Поле th32ModuleID представляет собой идентификатор модуля, который имеет значение только для функций TooIHelp32.

· Поле th32ProcessID содержит идентификатор (ID) опрашиваемого процесса. Этот ID можно использовать с другими функциями Win32.

· Поле GlblcntUsage содержит глобальный счетчик ссылок данного модуля.

· Поле ProccntUsage содержит счетчик ссылок модуля в контексте процесса-владельца.

· Поле modBaseAddr представляет собой базовый адрес модуля в памяти. Это значение действительно только в контексте идентификатора процесса th32ProcessID.

· Поле modBaseSize определяет размер (в байтах) модуля в памяти.

· В поле hModule содержится дескриптор модуля. Это значение действительно только в контексте идентификатора процесса th32ProcessID.

· В поле szModule содержится строка с именем модуля, завершающаяся нуль-символом.

· Поле szExepath предназначено для хранения строки с ограничивающим нуль-символом, содержащей полный путь модуля.

 

Обработка информации о динамической памяти (кучах)

Опрос куч несколько сложнее опроса других типов объектов. В Тоо1Не1р32 предусмотрены четыре функции, с помощью которых можно получить информацию о кучах. Первые две, Heap32ListFirst() и Heap32ListNext(позволяют выполнить проход по всем кучам процесса, а две другие, Heap32First() и Heap32Next(), используются для получения более подробной информации обо всех блоках внутри отдельной кучи.

Функции Heap32ListFirst() и Heap32ListNext() определяются следующим образом:

function Heap32ListFirst(hSnapshot: THandle; var lphl: THeapList32): BOOL; stdcall;

function Heap32ListNext(hSnapshot: THandle; var lphl: THeapList32): BOOL; stdcall;

И вновь первый параметр является дескриптором снимка, а второй (lphl) представляет собой запись типа THeapList32, передаваемую по ссылке. Определение этой записи имеет следующий вид:

Type

THeapList32 = record

dwSize: DWORD;

th32ProcessID: DWORD;

th32HeapID: DWORD;

dwFlags: DWORD;

end;

■ Поле dwSize определяет размер записи, и поэтому оно должно быть инициализировано значением SizeOf (THeapList32) до использования этой записи.

■ В поле th32ProcessID содержится идентификатор (ID) процесса-владельца.

■ В поле th32HeapID содержится идентификатор (ID) кучи. Этот ID имеет значение только для заданного процесса, и его можно использовать только с функциями Тоо1Не1р32.

■ В поле dwFlags хранится признак, который определяет тип кучи. В качестве значения этого поля может использоваться либо константа HF32 DEFAULT (которая означает, что текущая куча является стандартной кучей процесса), либо константа HF32_SHARED (которая означает, что текущая куча является разделяемой обычным способом).

Функции Heap32First() и Heap32Next() определяются следующим образом:

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

function Heap32Next(var lphe: THeapEntry32): BOOL; stdcall;

Списки параметров этих функций немного отличаются от соответствующих списков функций, связанных с перечислением процессов, потоков, модулей. Эти функции предназначены для перечисления блоков данной кучи в данном процессе, а не некоторых свойств одного процесса, вызове функции Heap32First() параметры, установленные в полях th32ProcessID и;32HeapID, должны быть равны значениям одноименных полей записи THeapList32, заполненной с помощью функций Heap32ListFirst() или Heap32ListNext(). Var-параметр lphe функций Heap32First() и Heap32Next() имеет тип THeapEntry32. Эта запись содержит дескриптивную информацию, относящуюся к блоку кучи, и ее определение имеет следующий вид:

type

THeapEntry32= record

dwSize: DWORD;

Date: 2015-11-14; view: 356; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию