20.                 Средства получения информации о процессах и потоках в ОС MS Windows.

Error 404: answer not found J

 

 

 

 

 

 

 

 


 

Задача получения списка выполняющихся в системе процессов является одной из основных при выполнении мониторинга ресурсов, как отдельного ПК, так и ЛВС в целом, поэтому для ее решения разработано значительное количество утилит, имеется встроенное системное средство – диспетчер задач.

Все перечисленные программные средства используют как функции Win32 API (Application Program Interface – прикладной программный интерфейс), так и функции еще одного базового интерфейса, называемого Native API (естественный API). Внешняя часть Native API  пользовательского режима содержится в модуле ntdll.dll, «настоящий» интерфейс реализован в ntoskernel.exe – ядре операционной системы NT (NT operation system kernel). Функции Win32 API, как правило, обращаются к функциям Native API, отбрасывая часть полученной от них информации. Поэтому использование функций Native API позволяет получить, вообще говоря, более эффективное ПО.

К функциям Win32 API для   получения информации о выполняющихся в системе процессах относятся функции   CreateToolHelp32Snapshot(),  Process32First(), Process32Next(), Thread32First (),  Thread32Next(), Module32First(), Module32Next(), Heap32ListFirst(), Heap32ListNext() и некоторые другие. Самая известная из функций Native API для доступа к содержимому многих важных внутренних структур операционной системы, таких как списки процессов, потоков, дескрипторов, драйверов и т. п. – функция NtQuerySystemInformation ().

 

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

 

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

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

 

Флаг - dwFlags

Описание

TH32CS_SnapHEAPLIST

В снимок включается список куч, принадлежащих указанному процессу

TH32CS_SnapPROCESS

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

TH32CS_SnapTHREAD

В снимок включается список потоков

TH32CS_SnapMODULE

В снимок включается список модулей, принадлежащих указанному процессу

TH32CS_SnapALL

В снимок включается список куч, процессов, потоков и модулей

 

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

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

Process32First ( hSnapshot, LPProcessEntry32)

Process32Next ( hSnapshot, LPProcessEntry32).

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

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

1.    Первое поле этой структуры - dwSize - должно перед вызовом функции содержать размер структуры в байтах - sizeof (ProcessEntry32).

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

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

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

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

6.    Поле pcPriClassBase cодержит базовый приоритет процесса.

7.    Поле szExeFile  cодержит имя файла, создавшего процесс.

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

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

Сайт управляется системой uCoz