
- •Монитор процессов и потоков
- •Введение
- •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. Контрольные вопросы
- •Библиографический список
Получение информации о загруженных драйверах
Для получения информации о загруженных в память драйверах и их адресах используются функции EnumDeviceDrivers(), GetDeviceDriverBaseNameA(), GetDeviceDriverFileNameA(), вызываемые из библиотеки Psapi.dll. Прототипы функций имеют следующий вид:
function EnumDeviceDrivers(lp: pointer; cb: DWORD; lpcbNeeded: lpDWORD): BOOL; stdcall external 'psapi.dll';
function GetDeviceDriverBaseNameA(lp: pointer; lpBaseName: lpstr; nSize: DWORD): BOOL; stdcall external 'psapi.dll';
function GetDeviceDriverFileNameA(lp: pointer; lpFilename:LPTSTR; nSize: DWORD): DWORD; stdcall external 'psapi.dll';
Функция EnumDeviceDrivers (lp: pointer; cb: DWORD; lpcbNeeded: lpDWORD): BOOL возвращает массив указателей на загруженные в ОП драйверы. Указатель на массив задается первым аргументом функции, второй аргумент (входной параметр) задает размер массива, если этот размер является недостаточным, требуемый размер возвращается функцией в третьем параметре.
Пример вызова функции:
var
pdriver : array [1..138] of cardinal;
lpcbNeeded : dword;
if EnumDeviceDrivers(@pdriver, sizeof(pdriver), @lpcbNeeded)
then
label1.Caption := inttostr(lpcbNeeded)
Для получения списка имен драйверов служит функция GetDeviceDriverBaseNameA(lp: pointer; lpBaseName: lpstr; nSize: DWORD). Она получает адрес загруженного драйвера (первый аргумент) и размер имени драйвера (третий аргумент) и возвращает имя драйвера.
Пример вызова функции:
var
pdriver: array [1..138] of cardinal;
lpcbNeeded: dword;
i: integer;
basename: lpstr;
for I := 1 to lpcbneeded div 4 do
begin
getmem(basename,50);
GetDeviceDriverBaseNameA(pointer(pdriver[i]), BaseName, 50);
Методика выполнения
I. Выполнить базовые задания для всех студентов:
Используя компонент ListBox, построить список процессов, выполняющихся в системе.
Добавить возможность завершения прикладных процессов системы с указанием процесса курсором окна ListBox. Системные процессы (службы) завершать не нужно. Проверить работу приложения.
II. Выполнить индивидуальное задание для студента, прописанное в карточке-задании.
3. Отчет о выполненной контрольной работе
Отчет о выполненной контрольной работе оформляется в письменном виде на бумаге формата А4.
Содержание отчета:
Титульный лист с номером варианта задания, фамилией студента и преподавателя.
Перечень использованных при выполнении работы функций Win32 API и их назначение в виде таблицы.
Описание алгоритма и текст программной реализации (только обработчики событий) индивидуального задания.
Результаты, полученные при выполнении индивидуального задания (screenshot).
4. Контрольные вопросы
Функции Win32 API для получения базовых сведений о выполняющихся в системе процессах и используемых ими ресурсах.
Атрибуты (описатели, характеристики) процесса Win32.
Алгоритм работы приложения для получения списка имен выполняющихся процессов.
Алгоритм работы приложения для получения списка модулей, используемых процессом.
Алгоритм работы приложения для получения списка куч, используемых процессом.
Алгоритм принудительного завершения процесса.
Назначение и использование функции OpenProcess.
Функции Win32 API для получения базовых сведений о выполняющихся в системе процессах и используемых ими ресурсах.
Атрибуты (описатели, характеристики) процесса Win32, рассмотренные в работе (часть 1 и часть 2).
Функции Win32 API для получения информации о времени выполнения процессов и потоков.
Функции Win32 API для преобразования времени из формата filetime в общепринятый формат.
Функции Win32 API для получения информации счетчиков ввода-вывода.
Способ неявного вызова функций из DLL.
Функции Win32 API для получения информации об используемой процессом памяти.
Функции Win32 API для получения информации о загруженных драйверах. Аргументы функций. Алгоритм получения списка имен загруженных драйверов.
Назначение и использование функции OpenProcess.