Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ Монитор процессов и потоков СП_правленный.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
197.12 Кб
Скачать

1.3 Мониторинг процессов

Мониторинг выполняющихся в системе процессов – основа всех приложений для наблюдения за работой информационных систем и их пользователей. Для отслеживания появления в системе новых приложений или завершения выполнявшихся можно использовать два способа:

  1. периодическое выполнение снимка состояния системы и его анализ, для чего приложение, рассмотренное в п.1.1.1, подключается к обработчику прерываний таймера, (это просто, но неэффективно – приложения периодически не запускаются и не завершаются);

  2. подключение к процедуре запуска и завершения процессов с помощью функции ядра PsSetCreateProcessNotifyRoutine(), описанной в Windows DDK, путем регистрации функции обратного вызова, (это более эффективно, но требует разработки драйвера режима ядра).

2. Дополнительные функции

Цель работы – практическое знакомство с методикой использования функций Win32 API для получения дополнительной информации о процессах, потоках, модулях и драйверах ОС Windows XP.

Краткие теоретические сведения

    1. 2.1 Получение дополнительной информации о процессах и потоках

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

Для получения дополнительной информации – о времени работы процессов и их потоков, используемой памяти и других ресурсов – служат функции Win32 API GetProcessTimes(), GetThreadTimes(), GetProcessIoCounters(), GetProcessHandleCount(), GetProcessMemoryInfo(), GetProcessWorkingSetSize(), EnumDeviceDrivers(),

GetDeviceDriverBaseNameA(), GetDeviceDriverFileNameA().

      1. Получение информации о времени выполнения процессов и потоков

Функция GetProcessTimes(Handle: Thandle; CreateTime, ExitTime, KernelTime, UserTime: TFileTime) используется для получения времени запуска (создания), времени завершения, времени работы процесса в режиме ядра и пользователя. Процесс задается описателем (Handle), время возвращается ОС в переменных типа TFileTime. Время отсчитывается в 100 наносекундных интервалах с 1.01.1601 по Гринвичу. Для представления времени старта и завершения в привычном формате используются функции:

FileTimeToLocalFileTime(Tproc, LocalFileTime : TFileTime)

FileTimeToSystemTime(fTime : TFileTime ; SysT : TSystemTime)

Используя поля структуры TSystemTime, можно получить дату и время старта или завершения процесса с точностью до миллисекунды.

Функция GetThreadTimes(Handle: Thandle; CreateTime, ExitTime, KernelTime, UserTime: TFileTime) используется для получения времени запуска (создания), времени завершения, времени работы потока в режиме ядра и пользователя. Поток задается описателем (Handle), время возвращается ОС в переменных типа TFileTime. Время отсчитывается в 100 наносекундных интервалах с 1.01.1601 по Гринвичу. Для представления времени старта и завершения в привычном формате используются функции:

FileTimeToLocalFileTime(Tproc, LocalFileTime : TFileTime)

FileTimeToSystemTime(fTime : TFileTime ; SysT : TSystemTime)

Используя поля структуры TSystemTime, можно получить дату и время старта или завершения потока.

Для получения значений описателей процесса и потока в общем случае следует использовать функции OpenProcess() (см. часть 1) и OpenThread() – ее аргументы аналогичны. Необходимые значения идентификаторов процесса или потока получаются с помощью функций, рассмотренных в первой части работы.

В частном случае, когда интерес представляет текущий процесс (поток), описатель процесса (потока) возвращается функциями GetCurrentProcess() и GetCurrentThread(). Эти функции не имеют аргументов.