Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <stdio.h>
- #include <string.h>
- #include <string>
- #include <vector>
- #include <iostream>
- #define _SECOND 10000000
- DWORD WINAPI myFunc(LPVOID lpParam) {
- HANDLE wTimer;
- __int64 endTime;
- LARGE_INTEGER quitTime;
- SYSTEMTIME now;
- //task 1A ---------
- /*std::cout << "Write K seconds: ";
- int k = 0;
- std::cin >> k;
- if (k <= 0) {
- std::cout << "NO";
- }*/
- int k = rand() % 10;
- wTimer = CreateWaitableTimer(NULL, FALSE, NULL);
- endTime = -k * _SECOND;
- quitTime.LowPart = (DWORD)(endTime & 0xFFFFFFFF);
- quitTime.HighPart = (LONG)(endTime >> 32);
- SetWaitableTimer(wTimer, &quitTime, 0, NULL, NULL, FALSE);
- GetLocalTime(&now);
- printf("%d thread: System Time %d %d %d\n", *((int *)lpParam), now.wHour, now.wMinute, now.wSecond);
- WaitForSingleObject(wTimer, INFINITE);
- printf("%d thread: Waitable Timer sent signal\n", *((int*)lpParam));
- GetLocalTime(&now);
- printf("%d thread:System Time %d %d %d\n", *((int*)lpParam), now.wHour, now.wMinute, now.wSecond);
- CloseHandle(wTimer);
- return 0;
- }
- int main(int argc, char *argv[])
- {
- if (argc != 2) {
- std::cout << "NO!";
- }
- char *ptr = nullptr;
- const int n = std::strtol(argv[1], &ptr, 10);
- std::vector <HANDLE> handles;
- for (int i = 0; i < n; ++i) {
- STARTUPINFO startupinfo;
- PROCESS_INFORMATION processInfo;
- wchar_t p[100] = L"C:\\WINDOWS\\SYSTEM32\\NOTEPAD.EXE";
- wchar_t lpCommandLine[128];
- wcscpy_s(lpCommandLine, p);
- ZeroMemory(&startupinfo, sizeof(STARTUPINFO));
- startupinfo.cb = sizeof(startupinfo);
- if (!CreateProcess(NULL, lpCommandLine, NULL, NULL, FALSE,
- HIGH_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL, &startupinfo, &processInfo))
- {
- fprintf(stderr, "CreateProcess failed on error % d\n", GetLastError());
- ExitProcess(1);
- }
- else {
- handles.push_back(processInfo.hProcess);
- }
- }
- char ch;
- int i = 0;
- std::cout << "Type something to kill the next process!" << '\n';
- std::cout << "(type e to exit)" << std::endl;
- do {
- ch = '0';
- std::cin >> ch;
- if (i > (n-1) || ch == 'e') {
- for (int j = 0; j < n; ++j) {
- (TerminateProcess(handles[j], 0) ? "Killed" : "Missed");
- }
- break;
- }
- std::cout << '\n' << (TerminateProcess(handles[i++], 0) ? "Killed successfully" : "Miss") << '\n';
- std::cout << "Time to sleep..." << std::endl;
- Sleep(1000);
- } while (ch != 'e');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement