Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _WIN32_WINNT 0x500
- #include "Windows.h"
- #include <iostream>
- using namespace std;
- HANDLE hCalcJob; //Дескриптор завдання калькулятора
- HANDLE hPaintJob; //Дескриптор завдання графічного редактору
- HANDLE hWordPadJob; //Дескриптор завдання текстового редактору
- TCHAR tchCalcBuff[MAX_PATH + 1] = L"calc.exe";
- TCHAR tchPaintBuff[MAX_PATH + 1] = L"mspaint.exe";
- TCHAR tchWordPadBuff[MAX_PATH + 1] = L"notepad.exe";
- void AddCalc2Job(){
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- ZeroMemory(&pi, sizeof(pi));
- if (!CreateProcess(NULL, tchCalcBuff, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB | CREATE_SUSPENDED, NULL, NULL, &si, &pi)){
- return;
- }
- AssignProcessToJobObject(hCalcJob, pi.hProcess); // привязка процесу до завдання
- ResumeThread(pi.hThread); // Продовження роботи никти процесу
- }
- void AddPaint2Job(){
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- ZeroMemory(&pi, sizeof(pi));
- if (!CreateProcess(NULL, tchPaintBuff, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB | CREATE_SUSPENDED, NULL, NULL, &si, &pi)){
- return;
- }
- AssignProcessToJobObject(hPaintJob, pi.hProcess); // привязка процесу до завдання
- ResumeThread(pi.hThread); // продовження процесу нитки процесу
- }
- void AddWordPad2Job(){
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- ZeroMemory(&pi, sizeof(pi));
- if (!CreateProcess(NULL, tchWordPadBuff, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB | CREATE_SUSPENDED, NULL, NULL, &si, &pi)){
- return;
- }
- AssignProcessToJobObject(hWordPadJob, pi.hProcess); // привязка процесу до завдання
- ResumeThread(pi.hThread); // продовження процесу нитки процесу
- }
- void main(){
- hCalcJob = CreateJobObject(NULL, L"CalcJob"); // створюємо завдання для калькуляторів
- hPaintJob = CreateJobObject(NULL, L"PaintJob"); // створюємо завдання для графічного редактору
- hWordPadJob = CreateJobObject(NULL, L"Notepad.exe"); //створюємо завдання для текстового редактору
- JOBOBJECT_BASIC_LIMIT_INFORMATION jInfo;
- jInfo.LimitFlags = JOB_OBJECT_LIMIT_ACTIVE_PROCESS; // встановлення флагу ліміту
- jInfo.ActiveProcessLimit = 1; // ліміт активних процесів
- SetInformationJobObject(hCalcJob, JobObjectBasicLimitInformation, &jInfo, sizeof(jInfo)); // задаємо інформацію про завдання
- SetInformationJobObject(hPaintJob, JobObjectBasicLimitInformation, &jInfo, sizeof(jInfo)); // задаємо інформацію про завдання
- SetInformationJobObject(hWordPadJob, JobObjectBasicLimitInformation, &jInfo, sizeof(jInfo)); // задаємо інформацію про завдання
- int option;
- cout << "Gushin Aleksey kit 33" << endl;
- cout << "Choose your option:" << endl;
- cout << "1. Run calc.exe" << endl;
- cout << "2. Run mspaint.exe" << endl;
- cout << "3. Run notepad.exe" << endl;
- cout << "0. Exit" << endl;
- while (true){
- cin >> option;
- switch (option){
- case 1:
- CreateThread(0, 0, (LPTHREAD_START_ROUTINE)AddCalc2Job, 0, 0, 0); // Створюємо нитку з функції калькулятору
- break;
- case 2:
- CreateThread(0, 0, (LPTHREAD_START_ROUTINE)AddPaint2Job, 0, 0, 0); // Створюємо нитку з функції графічного редактора
- break;
- case 3:
- CreateThread(0, 0, (LPTHREAD_START_ROUTINE)AddWordPad2Job, 0, 0, 0); // Створюємо нитку з функції графічного редактора
- break;
- case 0:
- TerminateJobObject(hCalcJob, 0); // завершення завдання і всіх його процессів
- TerminateJobObject(hPaintJob, 0); // завершення завдання і всіх його процессів
- TerminateJobObject(hWordPadJob, 0);
- ExitProcess(0);
- break;
- default:
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement