Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.26 KB | None | 0 0
  1. #define _WIN32_WINNT 0x500
  2. #include "Windows.h"
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. HANDLE hCalcJob; //Дескриптор завдання калькулятора
  7. HANDLE hPaintJob; //Дескриптор завдання графічного редактору
  8. HANDLE hWordPadJob; //Дескриптор завдання текстового редактору
  9.  
  10. TCHAR tchCalcBuff[MAX_PATH + 1] = L"calc.exe";
  11. TCHAR tchPaintBuff[MAX_PATH + 1] = L"mspaint.exe";
  12. TCHAR tchWordPadBuff[MAX_PATH + 1] = L"notepad.exe";
  13.  
  14. void AddCalc2Job(){
  15.     STARTUPINFO si;
  16.     PROCESS_INFORMATION pi;
  17.     ZeroMemory(&si, sizeof(si));
  18.     si.cb = sizeof(si);
  19.     ZeroMemory(&pi, sizeof(pi));
  20.     if (!CreateProcess(NULL, tchCalcBuff, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB | CREATE_SUSPENDED, NULL, NULL, &si, &pi)){
  21.         return;
  22.     }
  23.     AssignProcessToJobObject(hCalcJob, pi.hProcess); // привязка процесу до завдання
  24.     ResumeThread(pi.hThread); // Продовження роботи никти процесу
  25. }
  26.  
  27. void AddPaint2Job(){
  28.     STARTUPINFO si;
  29.     PROCESS_INFORMATION pi;
  30.     ZeroMemory(&si, sizeof(si));
  31.     si.cb = sizeof(si);
  32.     ZeroMemory(&pi, sizeof(pi));
  33.     if (!CreateProcess(NULL, tchPaintBuff, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB | CREATE_SUSPENDED, NULL, NULL, &si, &pi)){
  34.         return;
  35.     }
  36.     AssignProcessToJobObject(hPaintJob, pi.hProcess); // привязка процесу до завдання
  37.     ResumeThread(pi.hThread); // продовження процесу нитки процесу
  38. }
  39.  
  40. void AddWordPad2Job(){
  41.     STARTUPINFO si;
  42.     PROCESS_INFORMATION pi;
  43.     ZeroMemory(&si, sizeof(si));
  44.     si.cb = sizeof(si);
  45.     ZeroMemory(&pi, sizeof(pi));
  46.     if (!CreateProcess(NULL, tchWordPadBuff, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB | CREATE_SUSPENDED, NULL, NULL, &si, &pi)){
  47.         return;
  48.     }
  49.     AssignProcessToJobObject(hWordPadJob, pi.hProcess); // привязка процесу до завдання
  50.     ResumeThread(pi.hThread); // продовження процесу нитки процесу
  51. }
  52.  
  53. void main(){
  54.  
  55.  
  56.     hCalcJob = CreateJobObject(NULL, L"CalcJob"); // створюємо завдання для калькуляторів
  57.     hPaintJob = CreateJobObject(NULL, L"PaintJob"); // створюємо завдання для графічного редактору
  58.     hWordPadJob = CreateJobObject(NULL, L"Notepad.exe"); //створюємо завдання для текстового редактору
  59.  
  60.     JOBOBJECT_BASIC_LIMIT_INFORMATION jInfo;
  61.     jInfo.LimitFlags = JOB_OBJECT_LIMIT_ACTIVE_PROCESS; // встановлення флагу ліміту
  62.     jInfo.ActiveProcessLimit = 1; // ліміт активних процесів
  63.     SetInformationJobObject(hCalcJob, JobObjectBasicLimitInformation, &jInfo, sizeof(jInfo)); // задаємо інформацію про завдання
  64.     SetInformationJobObject(hPaintJob, JobObjectBasicLimitInformation, &jInfo, sizeof(jInfo)); // задаємо інформацію про завдання
  65.     SetInformationJobObject(hWordPadJob, JobObjectBasicLimitInformation, &jInfo, sizeof(jInfo)); // задаємо інформацію про завдання
  66.  
  67.     int option;
  68.     cout << "Gushin Aleksey kit 33" << endl;
  69.     cout << "Choose your option:" << endl;
  70.     cout << "1. Run calc.exe" << endl;
  71.     cout << "2. Run mspaint.exe" << endl;
  72.     cout << "3. Run notepad.exe" << endl;
  73.     cout << "0. Exit" << endl;
  74.  
  75.     while (true){
  76.         cin >> option;
  77.         switch (option){
  78.         case 1:
  79.             CreateThread(0, 0, (LPTHREAD_START_ROUTINE)AddCalc2Job, 0, 0, 0); // Створюємо нитку з функції калькулятору
  80.             break;
  81.         case 2:
  82.             CreateThread(0, 0, (LPTHREAD_START_ROUTINE)AddPaint2Job, 0, 0, 0); // Створюємо нитку з функції графічного редактора
  83.             break;
  84.         case 3:
  85.             CreateThread(0, 0, (LPTHREAD_START_ROUTINE)AddWordPad2Job, 0, 0, 0); // Створюємо нитку з функції графічного редактора
  86.             break;
  87.         case 0:
  88.             TerminateJobObject(hCalcJob, 0); //  завершення завдання і всіх його процессів
  89.             TerminateJobObject(hPaintJob, 0); // завершення завдання і всіх його процессів
  90.             TerminateJobObject(hWordPadJob, 0);
  91.             ExitProcess(0);
  92.             break;
  93.         default:
  94.             break;
  95.         }
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement