Студопедия — Получение списка процессов, выполняющихся в системе
Студопедия Главная Случайная страница Обратная связь

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

Получение списка процессов, выполняющихся в системе






 

1.1.1 Использование функций CreateToolHelp32Snapshot () и Process32xxxx()

для получения списка имен процессов

 

Первый этап получения информации о выполняющихся в системе процессах –получение снимка (snapshot) системы, который содержит информацию о состоянии системы в момент выполнения снимка.

Снимок создается с помощью функции CreateToolHelp32Snapshot (dwFlags, th32ProcessID), первый аргумент определяет, какая информация будет записана в снимок. Возможные значения dwFlags приведены в таблице 1.

Таблица 1

Возможные значения dwFlags

Флаг - dwFlags Описание
TH32CS_SnapHEAPLIST В снимок включается список куч, принадлежащих указанному процессу
TH32CS_SnapPROCESS В снимок включается список процессов, присутствующих в системе
TH32CS_SnapTHREAD В снимок включается список потоков
TH32CS_SnapMODULE В снимок включается список модулей, принадлежащих указанному процессу
TH32CS_SnapALL В снимок включается список куч, процессов, потоков и модулей

 

Второй аргумент определяет процесс, информация о котором необходима (если требуется список куч и модулей). В остальных случаях он игнорируется.

Второй этап – извлечение из снимка списка процессов. Для выполнения этой операции служат функции:

Process32First (hSnapshot, LPProcessEntry32);

Process32Next (hSnapshot, LPProcessEntry32).

Первый аргумент – хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).

Второй аргумент – структура, содержащая 10 полей:

1. Первое поле – dwSize – размер структуры в байтах. Это единственное поле, которое должно быть заполнено до вызова функции Process32First. Заполнить его можно, используя выражение sizeof(PROCESSENTRY32).

2. Второе поле – cntUsage – содержит число ссылок на процесс, то есть число потоков, которые в настоящий момент используют какие-либо данные процесса.

3. Третье поле – th32ProcessID – является идентификатором процесса.

4. Четвертое поле – th32DefaultHeapID – не используется, и всегда устанавливается в ноль.

5. Пятое поле – th32ModuleID – не используется, и всегда устанавливается в ноль.

6. Шестое поле – cntThreads – определяет число потоков, принадлежащих процессу.

7. Седьмое поле – th32ParentProcessID – является идентификатором родительского по отношению к текущему процесса.

8. Восьмое поле – pcPriClassBase – содержит базовый приоритет процесса.

9. Девятое поле – dwFlags – не используется, и всегда устанавливается в ноль.

10. Десятое поле – szExeFile – содержит имя файла, создавшего процесс.

Для того, чтобы получить информацию о первом процессе в снимке, необходимо вызвать функцию Process32First. В случае успешного завершения функция возвращает TRUE. Для того, чтобы просмотреть все оставшиеся процессы, нужно вызывать функцию Process32Next до тех пор, пока она не возвратит FALSE.

В список используемых модулей – uses – необходимо добавить модуль TlHelp32

 

Пример 1. Получить список имен выполняющихся в системе процессов, используя рассмотренные выше функции.

На форме размещены компоненты ListBox, Label и Button, обработчик события OnClick имеет вид:

var

SH: Thandle;

Num,I: Integer;

PPE: TProcessEntry32;

Pr_names: array [0..80] of string;

begin

Num:= 0;

// получение снимка состояния системы

SH:= CreateToolHelp32SnapShot(Th32cs_SnapAll,0);

// выделение из снимка имени первого процесса

PPE.dwSize:= sizeof(ProcessEntry32);

Process32First(SH,PPE);

Pr_Names[Num]:= PPE.szExeFile;

// получение имен других процесса

while Process32Next(SH,PPE) do

begin

Num:= Num+1;

Pr_Names[Num]:= PPE.szExeFile;

end;

Listbox1.Clear;

// вывод списка имен выполняющихся процессов

for I:=0 to Num do Listbox1.Items.Add(Pr_Names[I]);

// освобождение ресурса – снимка состояния системы

CloseHandle(SH)

end;

Результат выполнения примера 1 показан на рис. 2.

 

Рис. 2. Список выполняющихся процессов

 

1.1.2 Использование функций CreateToolHelp32Snapshot () и Thread32xxxx()

для получения сведений о приоритетах потоков процессов

 

Для получения сведений о приоритетах потоков необходимо извлечь из снимка состояния системы с помощью функций Thread32First() и Thtead32Next () значения соответствующих полей.

Обращение к функциям имеет вид:

Thread32First (hSnapshot, LPTHREADEntry32)

Thtead32Next (hSnapshot, LPTHREADEntry32).

Первый аргумент – хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).

Второй аргумент – структура, содержащая 7 полей:

1. Первое поле – dwSize – размер структуры в байтах. Это единственное поле, которое должно быть заполнено до вызова функцииThread32First. Заполнить его можно, используя выражение sizeof( Thread Entry32).

2. ПолеcntUsageth –не используется и всегда устанавливается в ноль.

3. Поле32ThreadID – не используется и всегда устанавливается в ноль.

4. Поле – th32OwnerProcessID – содержит идентификатор родительского процесса.

5. Поле – tpBasePri – содержит текущий приоритет потока.

6. Поле – tpDeltaPri – содержит разность между текущим уровнем приоритета потока и базовым уровнем, то есть тем, который присваивается при создании потока.

7. Поле – dwFlags – не используется и всегда устанавливается в ноль.

 

Пример 2. Получить список выполняющихся в системе потоков, используя рассмотренные выше функции. Вывести содержимое полей 2 и 3 структуры THREADEntry32.

На форме размещены компоненты ListView, Label и Button, обработчик события OnClick имеет вид:

var

Sh: Thandle;

Th: TTHREADENTRY32;

LstIt: TlistItem;

begin

Sh:= CreateToolHelp32Snapshot(TH32CS_SNAPALL,0);

Th.dwSize:= sizeof(TTHREADEntry32);

Thread32First(sh,Th);

ListView1.Items.Clear;

LstIt:=ListView1.Items.Add;

LstIt.Caption:=IntToStr(Th.th32OwnerProcessID);

LstIt.SubItems.Add(IntToStr(Th.tpBasePri));

repeat

LstIt:=ListView1.Items.Add;

LstIt.Caption:=IntToStr(Th.th32OwnerProcessID);

LstIt.SubItems.Add(IntToStr(Th.tpBasePri))

until not Thread32Next(sh,Th);

CloseHandle(Sh);

end;

Созданы 2 Columns, имеющие заголовки «Идент процесса» и «Базовый приор потока» (свойства ListView).

ВАЖНО! Свойство ViewStyle компонента ListView должно быть установлено

в vsReport.

Результат выполнения примера 2 показан на рис. 3.

Рис. 3. Список потоков

 

1.1.3 Использование функций CreateToolHelp32Snapshot () и Module32xxxx()

для получения списка модулей

 

Для получения сведений о приоритетах потоков необходимо извлечь из снимка состояния системы с помощью функций Module32First() и Module32Next() значения соответствующих полей.

Обращение к функциям имеет вид:

Module32First (hSnapshot, LPMODULEENTRY32);

Module32Next (hSnapshot, LPMODULEENTRY32).

Первый аргумент – хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).

Второй аргумент – структура, содержащая 10 полей:

1. Первое поле – dwSize – размер структуры в байтах. Это единственное поле, которое должно быть заполнено до вызова функцииModule 32First. Заполнить его можно, используя выражение sizeof( Module Entry32);

2. th32ModuleID: DWORD – размер модуля;

3. th32ProcessID: DWORD – идентификатор процесса, владеющего модулем;

4. GlblcntUsage: DWORD – счетчик глобальных пользователей модуля;

5. ProccntUsage: DWORD – счетчик процессов - пользователей;

6. modBaseAddr: BYTE – базовый адрес модуля;

7. modBaseSize: DWORD – базовый размер модуля;

8. hModule: HMODULE – хэндл модуля;

9. szModule: array [1.. MAX_MODULE_NAME32 + 1] of char – имя модуля;

10. szExePath: array [1.. MAX_PATH] of char – путь размещения модуля.

 

1.1.4 Использование функций CreateToolHelp32Snapshot () и Heap32Listxxxx()

для получения списка куч

 

Для получения сведений о кучах необходимо извлечь из снимка состояния системы с помощью функций Heap32ListFirst() и Heap32ListNext () значения соответствующих полей.

Обращение к функциям имеет вид:

Heap32ListFirst (hSnapshot, LPHEAPLIST32);

Heap32ListNext (hSnapshot, LPHEAPLIST32).

Первый аргумент – хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).

Второй аргумент – структура, содержащая 4 поля:

1. dwSize: DWORD – размер кучи;

2. th32ProcessID: DWORD – идентификатор процесса, владеющего кучей;

3. th32HeapID: DWORD – идентификатор кучи;

4. dwFlags: DWORD – тип кучи.

 








Дата добавления: 2015-09-07; просмотров: 506. Нарушение авторских прав; Мы поможем в написании вашей работы!



Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Ученые, внесшие большой вклад в развитие науки биологии Краткая история развития биологии. Чарльз Дарвин (1809 -1882)- основной труд « О происхождении видов путем естественного отбора или Сохранение благоприятствующих пород в борьбе за жизнь»...

Этапы трансляции и их характеристика Трансляция (от лат. translatio — перевод) — процесс синтеза белка из аминокислот на матрице информационной (матричной) РНК (иРНК...

Условия, необходимые для появления жизни История жизни и история Земли неотделимы друг от друга, так как именно в процессах развития нашей планеты как космического тела закладывались определенные физические и химические условия, необходимые для появления и развития жизни...

Тема: Изучение приспособленности организмов к среде обитания Цель:выяснить механизм образования приспособлений к среде обитания и их относительный характер, сделать вывод о том, что приспособленность – результат действия естественного отбора...

Тема: Изучение фенотипов местных сортов растений Цель: расширить знания о задачах современной селекции. Оборудование:пакетики семян различных сортов томатов...

Тема: Составление цепи питания Цель: расширить знания о биотических факторах среды. Оборудование:гербарные растения...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия