Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Николаев СПО ЛР3.docx
Скачиваний:
1
Добавлен:
04.05.2019
Размер:
123.56 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«Тверской государственный технический университет»

Кафедра электронных вычислительных машин

Отчёт по лабораторной работе №3

По дисциплине “Системное программное обеспечение”

на тему: “ Процессы и модули ”.

Выполнил: Николаев В.Ю.

Группа: ВМКСС-0604

Проверил: Неведомский А.Н.

Тверь

2009

Задание

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

Цель

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

Описание

Приложение, реализуемое в данной лабораторной работе, должно быть выполнено в виде окна, содержащего два списка. В первом должны отображаться выполняемые процессы (идентификатор и имя процесса), во втором – модули процесса, выбранного в первом списке (хендл и имя модуля). Также необходима кнопка обновления списка процессов.

Задача может быть реализована в несколько этапов:

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

б) получение имен процессов;

в) получение списка модулей для заданного процесса.

Для выполнения задачи в системе Windows NT необходимо использовать средства Process Status Helper (реализуемые библиотекой Psapi.dll).

Процессы и модули

Любое приложение в платформе Win32 состоит из одного или нескольких процессов. Процессом, в простейшем понимании, является выполняющаяся программа. Каждый процесс предоставляет ресурсы, необходимые для выполнения программы. Процесс обладает виртуальным адресным пространством, исполняемым кодом, данными, описателями (хендлами) объектов, переменными окружения, базовым приоритетом и т.д.

Модулем называется исполняемый файл или динамически загружаемая библиотека (DLL). Каждый процесс состоит обычно из одного или нескольких модулей. Впрочем, некоторые системные процессы могут не иметь соответствующим образом оформленных модулей. Обычный процесс имеет следующую структуру:

 

Модуль исполняемого файла somefile.exe

Модуль DLL somedll_1.dll

Модуль DLL somedll_2.dll

Модуль DLL somedll_n.dll

 

Каждый процесс в системе имеет свой уникальный идентификатор (process identifier, PID). Но функции, работающие с процессами, требуют параметром не идентификатор, а хендл процесса. Это обусловлено тем, что идентификатор сам по себе не несет информации о процессе, он лишь однозначно идентифицирует его; хендл же указывает на структуру, содержащую эту информацию. Для одного и того же процесса может быть открыто несколько разных хендлов (например, с разными правами доступа или наследования).

Получение списка идентификаторов процессов

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

Получение имен процессов

Получить имя процесса можно, получив имя первого модуля процесса. Первым обычно является модуль исполняемого файла. Для получения имени модуля используется функция GetModuleBaseName. Необходимо учесть, что некоторые системные процессы не имеют оформленных модулей, то есть таким образом получить их имя невозможно. Для таких процессов имя можно не выводить либо выводить, что имя неизвестно. Отдельно можно обрабатывать процесс «Бездействие системы», имеющий всегда PID = 0.