
- •Монитор процессов и потоков
- •Введение
- •1. Базовые функции
- •Краткие теоретические сведения
- •1.1. Получение списка процессов, выполняющихся в системе
- •1.1.1 Использование функций CreateToolHelp32Snapshot () и Process32xxxx()
- •1.1.2 Использование функций CreateToolHelp32Snapshot () и Thread32xxxx()
- •1.1.3 Использование функций CreateToolHelp32Snapshot () и Module32xxxx()
- •1.1.4 Использование функций CreateToolHelp32Snapshot () и Heap32Listxxxx()
- •1.2 Завершение выбранного процесса
- •1.3 Мониторинг процессов
- •2. Дополнительные функции
- •Краткие теоретические сведения
- •2.1 Получение дополнительной информации о процессах и потоках
- •Получение информации о времени выполнения процессов и потоков
- •Получение информации счетчиков ввода-вывода
- •Получение информации об используемой процессом памяти
- •Получение информации о загруженных драйверах
- •Методика выполнения
- •3. Отчет о выполненной контрольной работе
- •4. Контрольные вопросы
- •Библиографический список
1.3 Мониторинг процессов
Мониторинг выполняющихся в системе процессов – основа всех приложений для наблюдения за работой информационных систем и их пользователей. Для отслеживания появления в системе новых приложений или завершения выполнявшихся можно использовать два способа:
периодическое выполнение снимка состояния системы и его анализ, для чего приложение, рассмотренное в п.1.1.1, подключается к обработчику прерываний таймера, (это просто, но неэффективно – приложения периодически не запускаются и не завершаются);
подключение к процедуре запуска и завершения процессов с помощью функции ядра PsSetCreateProcessNotifyRoutine(), описанной в Windows DDK, путем регистрации функции обратного вызова, (это более эффективно, но требует разработки драйвера режима ядра).
2. Дополнительные функции
Цель работы – практическое знакомство с методикой использования функций Win32 API для получения дополнительной информации о процессах, потоках, модулях и драйверах ОС Windows XP.
Краткие теоретические сведения
2.1 Получение дополнительной информации о процессах и потоках
Задача получения списка выполняющихся в системе процессов и их базовых свойств является одной из основных при выполнении мониторинга ресурсов как отдельного ПК, так и ЛВС в целом. Для ее решения используются базовые функции Win32 API – CreateToolHelp32Snapshot(), Process32First(), Process32Next(), Thread32First(), Thread32Next(), Module32First(), Module32Next(), Heap32ListFirst(), Heap32ListNext(), рассмотренные в первой части работы.
Для получения дополнительной информации – о времени работы процессов и их потоков, используемой памяти и других ресурсов – служат функции Win32 API GetProcessTimes(), GetThreadTimes(), GetProcessIoCounters(), GetProcessHandleCount(), GetProcessMemoryInfo(), GetProcessWorkingSetSize(), EnumDeviceDrivers(),
GetDeviceDriverBaseNameA(), GetDeviceDriverFileNameA().
Получение информации о времени выполнения процессов и потоков
Функция 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(). Эти функции не имеют аргументов.