Задания на лабы для ВТ / LR_7
.DOCЛабораторная работа 7. Исследование процессов и потоков
Цель работы. Разработать консольное приложение для исследования процессов и связанных с ними потоков
7.1.Возможности программы:
-
получение снимка текущего состояния системы
-
получение упорядоченного списка процессов
-
получение упорядоченного списка потоков для выбранного процесса
7.2.Используемые функции Win32 API (tlhelp32.h):
Таблица вариантов
Критерии сортировки процессов:
Р1 – в порядке убывания числа потоков процесса
Р2 – в порядке возрастания числа потоков процесса
Р3 – в порядке убывания приоритета процесса
Р4 – в порядке возрастания приоритета процесса
Р5 – по имени исполняемого файла
Р6 – по идентификатору процесса
Р7 – по идентификатору модуля
Критерии сортировки потоков:
Т1 - в порядке убывания идентификатора потока
Т2 – в порядке возрастания идентификатора потока
Т3 – в порядке убывания приоритета потока
Т4 – в порядке возрастания приоритета потока
ПРИМЕЧАНИЕ: при отображении списков обязательно показывать параметр объекта, использованный при сортировке!
|
Вар.01 |
Вар.02 |
Вар.03 |
Вар.04 |
Вар.05 |
Вар.06 |
Вар.07 |
Вар.08 |
Вар.09 |
Вар.10 |
CreateToolhelp32Snapshot |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Сортировка процессов: |
Р1 |
Р2 |
Р3 |
Р4 |
Р5 |
Р6 |
Р7 |
Р1 |
Р2 |
Р3 |
Process32First |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Process32Next |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Сортировка потоков: |
Т1 |
Т2 |
Т3 |
Т4 |
Т1 |
Т2 |
Т3 |
Т4 |
Т1 |
Т2 |
Thread32First |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Thread32Next |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
|
Вар.11 |
Вар.12 |
Вар.13 |
Вар.14 |
Вар.15 |
Вар.16 |
Вар.17 |
Вар.18 |
Вар.19 |
Вар.20 |
CreateToolhelp32Snapshot |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Сортировка процессов: |
Р4 |
Р5 |
Р6 |
Р7 |
Р1 |
Р2 |
Р3 |
Р4 |
Р5 |
Р6 |
Process32First |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Process32Next |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Сортировка потоков: |
Т3 |
Т4 |
Т1 |
Т2 |
Т3 |
Т4 |
Т1 |
Т2 |
Т3 |
Т4 |
Thread32First |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Thread32Next |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Приложение 7. Функции и структуры для исследования процессов и потоков
HANDLE WINAPI CreateToolhelp32Snapshot( // Создание объекта «снимок системы» [out]
DWORD dwFlags, // - флаги [in]
DWORD th32ProcessID // - идентификатор процесса [in]
);
BOOL WINAPI Process32First( // Получение информации о первом процессе в списке процессов
HANDLE hSnapshot, // хэндл снимка [in]
LPPROCESSENTRY32 lppe // указатель на структуру «информация о процессе» [in/out]
);
BOOL WINAPI Process32Next( // Получение информации о следующем процессе в списке процессов
HANDLE hSnapshot, // хэндл снимка [in]
LPPROCESSENTRY32 lppe // указатель на структуру «информация о процессе» [out]
);
BOOL WINAPI Thread32First( // Получение информации о первом потоке в списке потоков
HANDLE hSnapshot, // хэндл снимка [in]
LPTHREADENTRY32 lpte // указатель на структуру «информация о потоке» [in/out]
);
BOOL WINAPI Thread32Next( // Получение информации о следующем потоке в списке потоков
HANDLE hSnapshot, // хэндл снимка [in]
LPTHREADENTRY32 lpte // указатель на структуру «информация о потоке» [out]
);
typedef struct tagPROCESSENTRY32
{
DWORD dwSize; - размер структуры
DWORD cntUsage; - счетчик ссылок на процесс
DWORD th32ProcessId; - идентификатор процесса
DWORD th32DefaultHeapId; - идентификатор ДОП по умолчанию
DWORD th32ModuleId; - идентификатор модуля
DWORD cntThreads; - число потоков процесса
DWORD th32ParentProcessId; - идентификатор родительского процесса
LONG pcPriClassBase; - базовый класс приоритета
DWORD dwFlags; - флаги
char szExeFile[MAX_PATH]; - путь к файлу
}PROCESSENTRY32;
typedef PROCESSENTRY32 *PPROCESSENTRY32;
typedef PROCESSENTRY32 *LPPROCESSENTRY32;
typedef struct tagTHREADENTRY32
{
DWORD dwSize; - размер структуры
DWORD cntUsage; - счетчик ссылок на поток
DWORD th32ThreadId; - идентификатор поток
DWORD th32OwnerProcessId; - идентификатор процесса-владельца
LONG tpBasePri; - текущий приоритет потока
LONG tpDeltaPri; - относительный приоритет потока
DWORD dwFlags; - флаги
}THREADENTRY32;
typedef THREADENTRY32 *PTHREADENTRY32;
typedef THREADENTRY32 *LPTHREADENTRY32;