Добавил:
piter-i.narod.ru Программист ПЛИС Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

os2

.pdf
Скачиваний:
8
Добавлен:
24.06.2018
Размер:
104.36 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федеральное государственное образовательное бюджетное учреждение

высшего профессионального образования

Московский технический университет связи и информатики

----------------------------------------------------------------------------------------------------

Кафедра Математической кибернетики и информационных технологий

Лабораторная работа № 2 по дисциплине ОПЕРАЦИОННЫЕ СИСТЕМЫ на тему:

«Процессы и потоки»

Выполнил:

Студент: Иванюк Пѐтр Григорьевич (Ф.И.О.)

Группа: 2ВМ15025

Проверил:

Старший преподаватель: Королькова Татьяна Валерьевна (Ф.И.О., должность преподавателя)

Москва 2018

Цельработы:Получение практических навыков при использовании Win32 API для исследования процессов.

Программа, которая принимая дескриптор, имя или полное имя модуля, возвращает другие два элемента в своих выходных параметрах.

Будет выполнять последовательно по шагам следующее:

Используя функцию GetCurrentProcessId определит идентификатор текущего процесса.

Используя функцию GetCurrentProcess определит псевдодескриптор текущего процесса.

Используя функцию DuplicateHandle и значение псевдодескриптора определит дескриптора текущего процесса.

Используя функцию OpenProcess определит копию дескриптора текущего процесса.

Закроет дескриптор, полученный функцией DuplicateHandle.

Закроет дескриптор, полученный функцией OpenProcess.

Выдает название вызвавшего процесса.

Пример разработанного приложения.

#include <windows.h> #include <stdio.h> #include <tlhelp32.h> DWORD path,processID; HMODULE hand;

HANDLE process, Sprocess, target, Dtarget, Open, ToolHelp; char lpFilename[MAX_PATH], str[]="";

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{

PROCESSENTRY32 lppe; lppe.dwSize = sizeof(lppe);

hand = GetModuleHandle(NULL);

path = GetModuleFileName(hand, lpFilename, sizeof(lpFilename)); processID = GetCurrentProcessId();

process = GetCurrentProcess();

DuplicateHandle(process, Sprocess, target, &Dtarget, 0, TRUE,

DUPLICATE_SAME_ACCESS);

Open = OpenProcess(PROCESS_ALL_ACCESS, TRUE, processID);

CloseHandle(process);

CloseHandle(Open);

ToolHelp = CreateToolhelp32Snapshot(TH32CS_SNAPALL, processID);

Process32First(ToolHelp, &lppe);

sprintf(str,"%s\n", lppe.szExeFile); CloseHandle(ToolHelp);

sprintf(str, "Полное имя модуля: %s\nРазмер полного имени модуля: %d\nИдентификатор текущего процесса: %d\nПсевдодескриптор: %d\nДескриптор, полученный функцией

DuplicateHandle: %d\nДескриптор, полученный функцией OpenProcess: %d\nЗакрываем дескриптор, полученный функцией DuplicateHandle\nЗакрываем дескриптор, полученный функцией OpenProcess\nВызвавший процесс: %s", lpFilename, path, processID, process, Dtarget, Open, lppe.szExeFile);

MessageBox(NULL, str, "Процессы и потоки", MB_OK); return 0;

}

Соседние файлы в предмете Операционные системы