Диспетчер задач. Описание функций и структур. Внешний вид программы

Страницы работы

Фрагмент текста работы

Федеральное агентство связи

Сибирский государственный университет телекоммуникаций и информатики

                                                                                                                                       Кафедра ПМиК

Курсовая работа

по операционным системам

«Диспетчер задач»

                                                                                                                                            Выполнили:  

                      Группа П-92

Проверил:    профессор

Новосибирск, 2011

Задание к курсовой работе

Создать программу, выводящую информацию о запущенных процессах в системе, способную останавливать выбранные процессы, выставлять приоритет процессам, запускать новые процессы.

Описаниефункцийиструктур

void PrintProc(DWORD processID,int &k);

Функция, выводящая информацию о процессе с данным идентификатором.

void List();

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

void Term();

Данная функция завершает процесс с данным идентификатором.

void Setprior();

Функция выставляет какой-либо приоритет для процесса с данным индефикатором.

void Run();

Функция запускает процесс.

void view();

Данная функция выводит информацию о используемых процессом библиотек.

void menu();

Функция выводит на экран меню программы.

Внешний вид программы.


Листинг программы

Сервер

#include <windows.h>

#include <stdio.h>

#include <conio.h>

#include <iostream>

#include "psapi.h"

using namespace std;

void menu();

void Term();

void Setprior();

void view();

void CurPos(int x,int y){

HANDLE hConsole;

COORD crd;

crd.X=x;

crd.Y=y;

hConsole=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hConsole,crd);

}

void PrintProc(DWORD processID,int &k)

{

char szProcessName[MAX_PATH]="<unknown>";

DWORD priorityClass;

char y;

FILETIME fst,fet,fut,fkt;

SYSTEMTIME sst,set,sut,skt;

HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);

if (NULL != hProcess ){

HWND hWnd;

HMODULE hMod;

DWORD cbNeeded;

char className[95];

char title[110];

if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),&cbNeeded) )

{

GetModuleBaseName(hProcess,hMod,szProcessName,sizeof(szProcessName)/sizeof(char));

}

}

priorityClass=GetPriorityClass(hProcess);

char prior[10]={'\0'};

switch(priorityClass){

case HIGH_PRIORITY_CLASS:

strcpy(prior,"high");

break;

case IDLE_PRIORITY_CLASS:

strcpy(prior,"idle");

break;

case NORMAL_PRIORITY_CLASS:

strcpy(prior,"normal");

break;

case REALTIME_PRIORITY_CLASS:

strcpy(prior,"realtime");

break;

default:

//strcpy(prior,"<unknown>");

return;

break;

}

GetProcessTimes(hProcess,&fst,&fet,&fkt,&fut);

FileTimeToSystemTime(&fst,&sst);

FileTimeToSystemTime(&fet,&set);

FileTimeToSystemTime(&fkt,&skt);

FileTimeToSystemTime(&fut,&sut);

if(k==0){

k++;

printf("%c %30s  %c %10s %c %10s %c %13s %c %10s %c\n",179,"ProcessName",179,"Priority",179,"processID",179,"Start",179,"Kernel",179);

printf("%c",195);

for(int i=0;i<33;i++)

putchar(196);

putchar(197);

for(int i=0;i<12;i++)

putchar(196);

putchar(197);

for(int i=0;i<12;i++)

putchar(196);

putchar(197);

for(int i=0;i<15;i++)

putchar(196);

putchar(197);

for(int i=0;i<12;i++)

putchar(196);

putchar(180);

printf("\n");

}

printf("%c %30s  %c %10s %c %10u %c %2d:%2d:%2d:%3d  %c  %2d:%2d:%3d %c\n",179,szProcessName,179,prior,179,processID,179,sst.wHour+7,sst.wMinute,sst.wSecond,sst.wMilliseconds,179,skt.wMinute,skt.wSecond,skt.wMilliseconds,179);

if(k<11){

printf("%c",195);

for(int i=0;i<33;i++)

putchar(196);

putchar(197);

for(int i=0;i<12;i++)

putchar(196);

putchar(197);

for(int i=0;i<12;i++)

putchar(196);

putchar(197);

for(int i=0;i<15;i++)

putchar(196);

putchar(197);

for(int i=0;i<12;i++)

putchar(196);

putchar(180);

printf("\n");

}

else{

printf("%c",192);

for(int i=0;i<33;i++)

putchar(196);

putchar(193);

for(int i=0;i<12;i++)

putchar(196);

putchar(193);

for(int i=0;i<12;i++)

putchar(196);

putchar(193);

for(int i=0;i<15;i++)

putchar(196);

putchar(193);

for(int i=0;i<12;i++)

putchar(196);

putchar(217);

printf("\n");

}

k++;

if(k>11){

CurPos(92,3);

printf("Stop? - s\n");

CurPos(92,4);

printf("Continue? - c\n");

CurPos(92,5);

printf("Terminate? - t\n");

CurPos(92,6);

printf("Set priority? - p\n");

CurPos(92,7);

printf("View modules? - v\n");

CurPos(92,8);

y=getch();

switch(y){

case 's':

k=-1;

break;

case 'c':

k=0;

break;

case 't':

Term();

k=-1;

break;

case 'p':

Setprior();

k=-1;

break;

case 'v':

k=-1;

view();

break;

default:

k=0;

break;

}

system("cls");          

}

CloseHandle( hProcess );

}

void List(){

int k=0;

DWORD aProcesses[1024], cbNeeded, cProcesses;

int i;

if (!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))

return;

cProcesses=cbNeeded/sizeof(DWORD);

for (i=0;i<cProcesses;i++)

if(aProcesses[i]!=0){

if(i==cProcesses-1)

k=11;

PrintProc(aProcesses[i],k);

if(k==-1)

return;

}

menu();

}

void Term(){

HANDLE hProcess;

DWORD processID;

CurPos(92,10);

printf("pID:");

scanf("%u",&processID);

hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,processID);

//    GetExitCodeProcess(hProcess,lpExitCode);

TerminateProcess(hProcess,-9);

}

void Setprior(){

HANDLE hProcess;

DWORD priorityClass;

DWORD processID;

char ch;

CurPos(92,10);

printf("pID:");

scanf("%u",&processID);

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);

CurPos(92,11);

printf("priority(h\\i\\n\\r):");

ch=getch();

switch(ch){

case 'h':

priorityClass=HIGH_PRIORITY_CLASS;

break;

case 'i':

priorityClass=IDLE_PRIORITY_CLASS;

break;

case 'n':

priorityClass=NORMAL_PRIORITY_CLASS;

break;

case 'r':

priorityClass=REALTIME_PRIORITY_CLASS;

default:

return;

}

SetPriorityClass(hProcess,priorityClass);

}

void Run(){

STARTUPINFO si;

PROCESS_INFORMATION pi;

char name[256];

int l,i;

char s[256]={'\0'};

bool q=0;

ZeroMemory( &si, sizeof(si) );

si.cb = sizeof(si);

ZeroMemory( &pi, sizeof(pi) );

system("cls");

printf("Name process: ");

gets(name);

l=strlen(name);

for(i=0;i<l;i++)

if(name[i]=='\\'){

q=1;

break;

}

if(!q){

strcat(s,"C:\\Windows\\");

strcat(s,name);

strcpy(name,s);

}    

if(!CreateProcess(name,NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL, NULL,&si,&pi)){

printf("System error code: %i\n",GetLastError());

}

}

void view(){

DWORD processID;

HANDLE hProcess;

HMODULE* modHndls;

DWORD b_alloc=8, b_needed;

char modName[MAX_PATH];

int i;

CurPos(92,10);

printf("pID:");

scanf("%u",&processID);

system("cls");

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);

while(1){

modHndls=(HMODULE*)malloc(b_alloc);

EnumProcessModules(hProcess,modHndls,b_alloc,&b_needed);

if(b_alloc>=b_needed)

break;

else{

free(modHndls);

b_alloc*=2;

}

}

printf("%c %10s %c %22s %c %35s %c\n",179,"HMODULE",179,"Base Name",179,"File Name",179);

printf("%c",195);

for(int i=0;i<12;i++)

putchar(196);

putchar(197);

for(int i=0;i<24;i++)

putchar(196);

putchar(197);

for(int i=0;i<37;i++)

putchar(196);

putchar(180);

printf("\n");

for(i=0;i<b_needed/sizeof(DWORD);i++){

GetModuleBaseName(hProcess, modHndls[i],(LPSTR)modName,sizeof(modName

Похожие материалы

Информация о работе