Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,265

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

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

Студворк — интернет-сервис помощи студентам
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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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). Запустил qt-vs-addin-1.2.3-opensource. Как...

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

21
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,265
10.09.2021, 14:35  [ТС]
Студворк — интернет-сервис помощи студентам
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
 Аватар для Наталья8
624 / 382 / 67
Регистрация: 09.03.2016
Сообщений: 4,265
20.09.2021, 13:15  [ТС]
final_file(3).mp4
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2021, 13:15

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

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

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

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

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


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

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

Новые блоги и статьи
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru