Диспетчер задач. WinAPI

Автор: Олег Иванов, 28 Сентября 2010 в 11:30, курсовая работа

Описание работы

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
1.1 Общие сведения
Наименование системы
Система диспетчеризации процессов.
Плановые сроки начала и окончания работы
Разработка данной системы была начата 20.02.2008 г.
Завершение разработки планируется на 25.04.2008 г.
Порядок оформления работы
1. Обоснование необходимости разработки программы
Постановка задачи.
Сбор исходных материалов.
Выбор и обоснование критериев эффективности и качества разрабатываемой программы.
2. Научно-исследовательские работы
Определение структуры входных и выходных данных.
Предварительный выбор методов решения задач.
Обоснование целесообразности применения ранее разработанных программ.
Определение требований к техническим средствам.
Обоснование принципиальной возможности решения поставленной задачи.
3. Разработка и утверждение технического задания
Определение требований к программе.
Разработка технико-экономического обоснования разработки программы.
Определение стадий, этапов и сроков разработки программы и документации на нее.
Выбор языков программирования.
Согласование и утверждение технического задания.
1.2. Назначение и цели создания системы
1.2.1. Назначение системы
Программный продукт предназначен для отображения списка процессов системы, получения дополнительной информации о процессах и работы с ними.
1.2.2 .Цели создания системы
Программный продукт предназначен для отображения списка запущенных процессов. Программа должна включать в себя средства по завершению процесса, установке приоритета процесса, выключению, перезагрузке и смене профиля компьютера.
1.3. Характеристики объектов систематизации
1.3.1. Краткие сведения об объекте автоматизации
Объектом автоматизации является представление списка процессов, запущенных в системе, в виде удобном для восприятия пользователем и реализация операций над ними.
1.3.2. Сведения об условиях эксплуатации
Данная система проектируется лишь в учебных целях, вследствие чего будет эксплуатироваться узким кругом лиц на домашних персональных компьютерах.
1.4. Требования к системе

Работа содержит 1 файл

диспетчер задач.doc

— 905.50 Кб (Скачать)

      int i;

      i=SendMessage(hwnd,LB_ADDSTRING, 0,(DWORD) ((LPSTR)"Real time"));

    SendMessage(hwnd,LB_SETITEMDATA, i,(DWORD)REALTIME_PRIORITY_CLASS);

      i=SendMessage(hwnd,LB_ADDSTRING, 0,(DWORD) ((LPSTR)"High"));

    SendMessage(hwnd,LB_SETITEMDATA, i,(DWORD)HIGH_PRIORITY_CLASS);

      i=SendMessage(hwnd,LB_ADDSTRING, 0,(DWORD) ((LPSTR)"Normal"));

    SendMessage(hwnd,LB_SETITEMDATA, i,(DWORD)NORMAL_PRIORITY_CLASS);

      i=SendMessage(hwnd,LB_ADDSTRING, 0,(DWORD) ((LPSTR)"Low"));

    SendMessage(hwnd,LB_SETITEMDATA, i,(DWORD)IDLE_PRIORITY_CLASS);

} 

//Завершение  процесса

void Terminate(DWORD ID)

{

      //Получение  прав на завершение

      h=OpenProcess(PROCESS_TERMINATE, 0, ID);

      if(h==INVALID_HANDLE_VALUE){

            MessageBox(NULL,TEXT("Ошибка:INVALID_HANDLE_VALUE!"),

                        TEXT("Error"),MB_OK | MB_ICONERROR);

            return;

      }

      int i=0;

      //Завершение

      TerminateProcess(h,i);

      DWORD dw=WaitForSingleObject(h,5000);

      switch(dw){

            case WAIT_OBJECT_0:

                  MessageBox(hwndDlg,TEXT("Процесс завершен!"),

                        TEXT("ОК"),MB_OK | MB_ICONINFORMATION);

            break;

            case WAIT_TIMEOUT:

                  MessageBox(hwndDlg,TEXT("Ошибка завершения процесса!"),

                        TEXT("Ошибка"),MB_OK | MB_ICONERROR);

            break;

            case WAIT_FAILED:

                  MessageBox(hwndDlg,TEXT("Процесс завершен"),

                        TEXT("Все ок"),MB_OK | MB_ICONINFORMATION);

            break;

      }

      CloseHandle(h); 

} 

//Уничтожение процесса

void KillProcess(DWORD ID){

      DWORD dwThId;

      HANDLE hProc = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION |

            PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ,FALSE,ID);

      HANDLE hTh = CreateRemoteThread(hProc,NULL,0,NULL,NULL, CREATE_SUSPENDED,&dwThId);  

      if(!hProc || !hTh){

            MessageBox(NULL,TEXT("Some error:may be access denide?"),

                  TEXT("!"),0);

            return;

      }

      CONTEXT thcon;

      thcon.ContextFlags = CONTEXT_CONTROL;

      GetThreadContext(hTh,&thcon);

      thcon.Eip = 0xffffffff;

      SetThreadContext(hTh,&thcon);

      ResumeThread(hTh);

      CloseHandle(hTh);CloseHandle(hProc);

} 

BOOL SetCurrentPrivilege( LPCTSTR Privilege, BOOL bEnablePrivilege )

{

   HANDLE hToken;

   LUID luid;

   TOKEN_PRIVILEGES tp, tpPrevious;

   DWORD cbPrevious = sizeof( TOKEN_PRIVILEGES );

   BOOL bSuccess = FALSE; 

   if ( ! LookupPrivilegeValue( NULL, Privilege, &luid ) )

      return FALSE; 

   if( ! OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken ) )

      return FALSE; 

   tp.PrivilegeCount = 1;

   tp.Privileges[0].Luid = luid;

   tp.Privileges[0].Attributes = 0; 

   AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof( TOKEN_PRIVILEGES ), &tpPrevious, &cbPrevious ); 

   if ( GetLastError() == ERROR_SUCCESS )

   {

      tpPrevious.PrivilegeCount = 1;

      tpPrevious.Privileges[0].Luid = luid; 

      if ( bEnablePrivilege )

         tpPrevious.Privileges[0].Attributes |= ( SE_PRIVILEGE_ENABLED );

      else

         tpPrevious.Privileges[0].Attributes &= ~( SE_PRIVILEGE_ENABLED ); 

      AdjustTokenPrivileges( hToken, FALSE, &tpPrevious, cbPrevious, NULL, NULL ); 

      if ( GetLastError() == ERROR_SUCCESS )

         bSuccess=TRUE;

   } 

   CloseHandle( hToken ); 

   return bSuccess;

}

Информация о работе Диспетчер задач. WinAPI