411 / 284 / 59
Регистрация: 09.03.2016
Сообщений: 2,482
1

Терминатор нежелательных процессов Win7_64 C++ MSVC 2013

04.09.2021, 16:23. Показов 2941. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include "stdafx.h"
#include <iostream>
                        #include <fstream>
 
#include <conio.h>
#include <windows.h>
       #include <Tlhelp32.h> //-----PROCESSENTRY32
 
const int line_count=10;// Было 12... Выбрасывало исключение (Количество строк от начала файла)
 
 
 
 
//---------------------------------
BOOL KillProcess(int id)//--Функция. Убивать процессы.
{
    HANDLE ps = OpenProcess(PROCESS_ALL_ACCESS, false, id);//стояла единица
    if (ps)
    {
        TerminateProcess(ps, -9);
        //ShowMessage("Process is terminate 1");
        CloseHandle(ps);
        return true;
    }
    else {
        ps = OpenProcess(PROCESS_TERMINATE, TRUE, id);
        if (TerminateProcess(ps, 0))
        { // ShowMessage("Process is terminate 2");
            CloseHandle(ps);
            return true;
        }
        else { // ShowMessage("Process not terminate");
            CloseHandle(ps);
            return false;
        }
    }
}
 
 
 
//--------------------------------Узнать Есть ли процесс ???
 
DWORD IsProcessRunning(const TCHAR* const executableName, DWORD &ProcId) {
    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);
 
    const auto snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
 
    if (!Process32First(snapshot, &entry)) {
        CloseHandle(snapshot);
        return 0;
    } do {
        if (!_tcsicmp(entry.szExeFile, executableName)) {
 
            ProcId = entry.th32ProcessID;
            CloseHandle(snapshot);
            return ProcId;
        }
    } while (Process32Next(snapshot, &entry));
 
    CloseHandle(snapshot);
    return 0;
}
 
 
 
// ==================================
// ==================================
 
int _tmain(int argc, _TCHAR* argv[])
{
    HWND Hide; AllocConsole(); Hide = FindWindowA("ConsoleWindowClass", NULL); ShowWindow(Hide, 0);
//---------------------------
        std::ifstream file_in;
 
    char *path = (char *)LocalAlloc(LPTR, MAX_PATH + 1); // выделяем память из локальной кучи
    GetWindowsDirectoryA(path, MAX_PATH); // c:\Windows
    lstrcatA(path, "\\System32\\drivers\\etc\\hosts"); // добавляем путь с именем файла.
 
    file_in.open(path, std::ifstream::binary); // открываем файл , std::ifstream::binary
    // Get the length of the file
                        LocalFree(path);// Освобождаем память
    if (!file_in)
    {
        std::cout << " ===== hosts file does not read ===== \n\n";
        Sleep(10000);   return -1;
    }
                                        //  in.seekg(0, in.end);
                                        //  int len = in.tellg();
                                         //  in.seekg(0, in.beg);
                  // in.seekg(0, in.cur);// сдвинуть позицию in the stream на число...
//  [url]https://purecodecpp.com/archives/2751[/url]
    int temp_lenght = line_count * 55;
    //Создаем буффер для чтения
    char *buffer = (char *)LocalAlloc(LPTR, temp_lenght); // выделяем память из локальной кучи 
    
    //char* buffer = new char[n + 1];// Выделение памяти выше заполняет её нулями (ключ LPTR)
    //memset(buffer, 0, n + 1);
    // for (int i = 0; i < 12; i++)buffer[i] = 'f';
    
    int cur(0);
    int step(0);// Не писать в массив пустые строки
    static char rt[line_count][50];
    
    for (int i = 0; i < line_count; i++){// Почему..... Если двенадцать, то выбрасывает исключение
        // Буфера проверь... выделяемые  (количество прочитанных строк от начала файла)
        cur = file_in.tellg();
        
        // in.get(buffer, n);// Читаем n символов
        
        file_in.getline(buffer + (cur - i), temp_lenght, '#');// Читать temp_lenght символов, но до первого '#'
        
        if (strlen(buffer + (cur - i)) > 2){// ==================== Не вставлять в матрицу пустые строки
            
            //std::cout << strlen(buffer + (len - i)) << std::endl;// buffer + (len - i)
            
            int n(1);// Счётчик на заполнение матрицы
            int key_enter(0);// Ключ на вылет из цикла ( enter, пробел, или ноль )
 
            //==================================================    rt != 't'//  key != 0x0d    
            memset(&rt[i], 0, sizeof(rt[i]));// Обнуляю массив 
 
                        while (true){// Цикл. Прочесть слово дo enter или пробела, в матрицу
                            rt[i - step][n - 1] = *(buffer + (cur - i) + n);
                key_enter = rt[i - step][n - 1];  // <------ Приводим к интам
                if (key_enter == 0x0d || key_enter == 0x20 || key_enter == 0) break; // Вылет по enter или пустая строка
                n++;
            //  Sleep(10);
            }   }   else step++;
        
        //==================================================        
                 }
    // Освобождаем буффер
    LocalFree(buffer); //освобождаем ранее выделенную память.   
    
    //delete[] buffer;
    // Закрываю файл                     
    file_in.close();
    
    
//=============================== читать из матрицы и посылать на терминатор процессов
 
    while (true){
 
        for (int z = 0; z < line_count; z++){
            //                                       Не посылать на выполнение эти слова
            if (memcmp(rt[z], "Copyright ", strlen(rt[z])) == 0 ||
                memcmp(rt[z], "This ", strlen(rt[z])) == 0 ||
                memcmp(rt[z], "entry ", strlen(rt[z])) == 0 ||
                memcmp(rt[z], "be ", strlen(rt[z])) == 0 ||
                memcmp(rt[z], "The ", strlen(rt[z])) == 0 ||// The
                memcmp(rt[z], "space. ", strlen(rt[z]) - 1) == 0);// < --- Выполняеться точка с запятой (слово совпадает)
            else {
                int slength = strlen(rt[z]);// --------- char* to wchar_t
                int len = MultiByteToWideChar(CP_ACP, 0, rt[z], slength, 0, 0);
                
                wchar_t* From = new wchar_t[len];// +1 Под лишний ноль
                MultiByteToWideChar(CP_ACP, 0, rt[z], slength, From, len);
                From[slength-1] = '\0';
                Sleep(2000);
                // ================================== Вызовы на завершение процессов ==========
                DWORD ID_pr(0);
                IsProcessRunning(From, ID_pr);// был пробел
 
                if (ID_pr != 0) KillProcess(ID_pr);
 
                delete[] From;
            }
        }
    }
    //==================================================    
        //_getch();
    return 0;
}


Добавлено через 2 минуты
Работа с файлом на С/С++
при запуске это читает файл hosts....
В него можно вписать несколько
процессов, которые нежелательны....

Типа --- software_reporter_tool.exe

Почитайте, напишите, что думаете про сие изобретение.

Добавлено через 7 минут
C++
1
2
3
4
5
6
7
8
9
10
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# software_reporter_tool.exe
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2021, 16:23
Ответы с готовыми решениями:

Qt 5.3.2(msvc 2013) + opencv
Аналогичный вопрос по поводу ffmpeg 3.3.1 на msvc 2013 Как подключить правильно ? Я подключал...

Как подружить visual assits с Qt 5.3 (msvc 2013)
Устанавливал через онлайн установщик (qt 5.3, mingw, msvc2013, qt creator, mingw 4.8.2). Запустил...

Почему в MSVC++ 2008 компилируется, а в MSVC++ 2010 вылезает много ошибок?
Кстати, перед запуском в 2010 предлагает конвертировать код. Ну а чем эти две студии отличаются,...

Где можно скачать MSVC 1.0 или MSVC 1.5 ?
Где можно скачать MSVC 1.0 или MSVC 1.5 ?

21
411 / 284 / 59
Регистрация: 09.03.2016
Сообщений: 2,482
10.09.2021, 14:35  [ТС] 21
Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//============= 
                  bool no_job(true);// Нет записей в файле hosts вылет 
                       int count_n(0);
char** mass = new char*[line_count];//============ Массив указателей по числу проверяемых строк ============
                       
                       for (int i = 0; i < line_count; i++){//Цикл по количеству считываемых строк
                           char *buffer = (char *)LocalAlloc(LPTR, temp_lenght);
               if (fgets(buffer, temp_lenght, file_in) != NULL) {// Читал строку до конца       
                           //----------------Оставить одно первое слово
                           int d = 1, n = 1;
                           while (buffer[d] == ' '){ d++; n++; }//Пропустить пробелы спереди
                           while (buffer[d] != ' '){// Вырезать первое слово
                               if ((int)buffer[d] == 0x0d) break;
                               if ((int)buffer[d] == 0x00) break;
                               ++d;
                           } buffer[d] = '\0';
                           //---------------------------------------
                       if (strlen(buffer) < 3 ||//         Не вставлять в матрицу эти слова
                               memcmp(buffer + n, "Copyright ", strlen(buffer + n)) == 0 ||
                               memcmp(buffer + n, "This ", strlen(buffer + n)) == 0 ||
                               memcmp(buffer + n, "entry ", strlen(buffer + n)) == 0 ||
                               memcmp(buffer + n, "be ", strlen(buffer + n)) == 0 ||
                               memcmp(buffer + n, "The ", strlen(buffer + n)) == 0 ||// The
                               memcmp(buffer + n, "space. ", strlen(buffer + n) - 1) == 0);
                      else {
mass[count_n] = new char[strlen(buffer + n) + 1];// Место в памяти под слово (По количеству найденных слов)
                //              buffer + n  -- не с начала строки
                      strcpy(mass[count_n], buffer + n);// По указателю *
                    //   lstrcatA(mass[count_n], buffer + n);// Не по указателю
                      count_n++;
 no_job = false;
                              //  printf("%s \n", rt[i]);
                           }       } else
                                      { printf(" ===== hosts file does not read ===== \n\n");
                               Sleep(5000); return -1; 
                                      }
        LocalFree(buffer); //освобождаем ранее выделенную память.           
            }
    // Закрываю файл                     
     fclose(file_in);
//------------------------      
     char** mass_n = new char*[count_n];// ======= Перегонка в другой массив (избавился от висячих указателей)     
     for (int z = 0; z < count_n; z++){
 mass_n[z] = new char[strlen(mass[z]) + 1];// Место в памяти под слово (По количеству найденных слов)
   strcpy(mass_n[z], mass[z]);// По указателю * 
     }
Добавлено через 1 минуту
Экспертное управление памятью (если не ошибся)
На куче массив, по количеству букофф. ни чего лишнего.
0
411 / 284 / 59
Регистрация: 09.03.2016
Сообщений: 2,482
20.09.2021, 13:15  [ТС] 22
final_file(3).mp4
0
20.09.2021, 13:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2021, 13:15
Помогаю со студенческими работами здесь

Переход от MSVC 2017 к MSVC 2019
Добрый день, До сих пор я использовал MSVC 2017 x64, но планирую перейти на компилятор MSVC 2019...

Терминатор
Перед отправкой Терминатора Т-800 в прошлое для спасения Джона Коннора (события 2 части)...

Я как терминатор...
Я как терминатор, мне не нужно ничего, кроме как озабоченности моёго мозга.

Терминатор: Генезис
Imho, фильм неплохой, но на 3-м можно было бы и остановиться.

Образование нежелательных отступов
Всем привет! Я учусь верстать. Часть страницы я сделал http://kolorimage.narod2.ru/my.html , но у...

Блокировка нежелательных сайтов
Здравствуйте ! Есть такая проблемка.... Пример - нужно заблокировать все сайты домена *.com - как...

Блокировка нежелательных посетителей
Некоторые посетители нежелательны, а потому возникла необходимость их заблокировать с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru