Студопедия Главная Случайная страница Обратная связь

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

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





 

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; просмотров: 541. Нарушение авторских прав; Мы поможем в написании вашей работы!




Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


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


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Деятельность сестер милосердия общин Красного Креста ярко проявилась в период Тритоны – интервалы, в которых содержится три тона. К тритонам относятся увеличенная кварта (ув.4) и уменьшенная квинта (ум.5). Их можно построить на ступенях натурального и гармонического мажора и минора.  ...

Понятие о синдроме нарушения бронхиальной проходимости и его клинические проявления Синдром нарушения бронхиальной проходимости (бронхообструктивный синдром) – это патологическое состояние...

Опухоли яичников в детском и подростковом возрасте Опухоли яичников занимают первое место в структуре опухолей половой системы у девочек и встречаются в возрасте 10 – 16 лет и в период полового созревания...

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

ПРОФЕССИОНАЛЬНОЕ САМОВОСПИТАНИЕ И САМООБРАЗОВАНИЕ ПЕДАГОГА Воспитывать сегодня подрастающее поколение на со­временном уровне требований общества нельзя без по­стоянного обновления и обогащения своего профессио­нального педагогического потенциала...

Эффективность управления. Общие понятия о сущности и критериях эффективности. Эффективность управления – это экономическая категория, отражающая вклад управленческой деятельности в конечный результат работы организации...

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