Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
ZLOI
0 / 0 / 0
Регистрация: 17.05.2009
Сообщений: 7
#1

Кто-нибудь создаёт потоки как в MSDN? - C++

17.05.2009, 08:10. Просмотров 1877. Ответов 18
Метки нет (Все метки)

Приветствую, жизнь заставила писать на 2005м MVS и использовать MS SQL SERVER (требует ObjectARX).
Вообщем, раньше было какое-то предвзятое отношение, что C++ - это зло, но поработав с этим чудовищем недавно понял, что С++ - это и вправду зло.
Когда приходилось работать в Delphi, Java, PHP и даже ассемблере(MASM), то скорость разработки была гораздо выше.
Но раз некоторые утверждают, что С++ лучшее, что есть, то хочу проверить это, может быть я в чём-то ошибался.
Постановка задачи:
Для разработки программы "AntiCS", которую у меня попросили с кафедры, где я учусь в аспирантуре мне требуется разработать программный модуль запускаемый при загрузке Windows в виде скрытого процесса, который не виден в диспетчере задач и toolbar. Основная цель - уничтожение процессов hl.exe и czero.exe при их появлении в системе.
Впринципе, подобные программы я писал на Delphi за несколько минут, но есть желание быть универсалом и освоить С++, прошу Вашей помощи, потому что в процессе работы на С++ возникают разные маленькие проблемы, которые тормозят разработку, а в MSDN приходиться долго искать.
Итак вопрос:
Почему такая конструкция вызывает ошибку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DWORD KillCS(void)
{
    MessageBeep(2);
    return 0;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwThreadId;
    HANDLE hThread; 
            hThread = CreateThread( 
            NULL,              
            0,                 
            KillCS,        
            0,             
            0,                 
            &dwThreadId);
Ошибка звучит так:
cannot convert parameter 3 from 'DWORD (__cdecl *)(void)' to 'LPTHREAD_START_ROUTINE'
Но в то же самое время, такая конструкция проходит свободно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DWORD WINAPI KillCS(LPVOID lpParam)
{
    MessageBeep(2);
    return 0;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwThreadId;
    HANDLE hThread; 
            hThread = CreateThread( 
            NULL,              
            0,                 
            KillCS,        
            0,             
            0,                 
            &dwThreadId);
Хотелось бы ещё комментариев, нормальна ли такая конструкция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    HANDLE hSnapshot;
    PROCESSENTRY32 Entry;
    Entry.dwFlags = sizeof( PROCESSENTRY32 );
 
     // создаем моментальный снимок
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnapshot == INVALID_HANDLE_VALUE)
        return FALSE;
 
    // получаем информацию о первом процессе
    Entry.dwSize = sizeof(Entry);
    if (!Process32First(hSnapshot, &Entry))
        return FALSE;
 
    // перечисляем остальные процессы и уничтожаем неугодные
    do
    {    
        if ((wcscmp(Entry.szExeFile,L"czero.exe")==0)||(wcscmp(Entry.szExeFile,L"hl.exe")==0))
            TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS,true,Entry.th32ProcessID),0);
    }
    while (Process32Next(hSnapshot, &Entry));
 
    CloseHandle(hSnapshot);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2009, 08:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кто-нибудь создаёт потоки как в MSDN? (C++):

Кто нибудь, когда нибудь встречал Шрёдинбаг? - C++
Шрёдинбаг (англ. Schroedinbug) — термин, используемый в программировании для описания программной ошибки, которая никак не проявляет себя,...

Кто нибудь знает как написать игру на С ?) - C++
Зраствуйте Можно ли написать крестики нолики на С ? И как это сделать ? Дайте идею или код. Спасибо за внимание.

нужно сделать трассировку. кто-нибудь знает как? - C++
неужели никто не знает как делать трассировку? завтра преподу сдавать все, а я уже который день не могу сделать трассировку. ...

Всем добрый день! Кто-нибудь знает как исправить это? - C++
https://pp.vk.me/c625822/v625822049/3a869/cr3hbcL44_4.jpg Нарушение правил п.5.8. Запрещено публиковать ссылки на другие форумы, а...

Подскажите кто-нибудь, как записать квадратную динамическую матрицу в файл??? - C++
Подскажите кто-нибудь, как записать квадратную динамическую матрицу в файл??? Вот я её заполнил: #include<iostream> #include<stdio.h>...

Кто нибудь подскажет просто как объявить динамический массив M на M (с буквой M, я не ошибся) - C++
:)

18
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.05.2009, 09:21 #2
вот такая она функция...
DWORD WINAPI ThreadProc(
__in LPVOID lpParameter
);
0
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
17.05.2009, 11:56 #3
ZLOI,
... Ошибка звучит так: ...
... Но в то же самое время, такая конструкция проходит свободно: ...

А по-твоему, это одно и то же?

DWORD KillCS(void)
DWORD WINAPI KillCS(LPVOID lpParam)

Хотелось бы ещё комментариев, нормальна ли такая конструкция:
будет работать нормально, если процесс не защищен дескриптором безопасности и/или драйвером
0
ZLOI
0 / 0 / 0
Регистрация: 17.05.2009
Сообщений: 7
17.05.2009, 15:45  [ТС] #4
Цитата Сообщение от Rififi Посмотреть сообщение
А по-твоему, это одно и то же?

DWORD KillCS(void)
DWORD WINAPI KillCS(LPVOID lpParam)
Нет, но в качестве 3го параметра CreateThread я посылаю ссылку на подпрограмму, разве это гибко вставлять такие ограничения.
Зачем они нужны?
В Delphi всё равно функция это или процедура, с параметрами или без, кинул @KillCS и всё работает.
Цитата Сообщение от Rififi Посмотреть сообщение
будет работать нормально, если процесс не защищен дескриптором безопасности и/или драйвером
Обычно CS не защищён
Меня на самом деле удивляет то, что нельзя так
C++
1
if (Entry.szExeFile==L"czero.exe")
вместо
C++
1
if ((wcscmp(Entry.szExeFile,L"czero.exe")==0)||(wcscmp(Entry.szExeFile,L"hl.exe")==0))
Объясните почему не сравниваются строки? У него не перегружен ==?

Вообще, подскажете какие-нибудь готовые библиотеки для эффективной работы в MVS.
В линуксе я работал с QT3, не плохо получалось несмотря на убогость Kdeveloperа, помоему он так назывался.
0
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
17.05.2009, 21:40 #5
ZLOI,
разве это гибко вставлять такие ограничения.
Зачем они нужны?

это называется жесткой типизацией.

Объясните почему не сравниваются строки?
потому что в C/C++ строк нет.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.05.2009, 22:04 #6
ZLOI, сделай явное преобразование
C++
1
2
3
4
5
6
7
hThread = CreateThread( 
            NULL,              
            0,                 
            (LPTHREAD_START_ROUTINE)KillCS,        
            0,             
            0,                 
            &dwThreadId);
C++
1
if(0==wcscmp(Entry.szExeFile,L"czero.exe"))
1
ZLOI
0 / 0 / 0
Регистрация: 17.05.2009
Сообщений: 7
18.05.2009, 05:52  [ТС] #7
Цитата Сообщение от alex_x_x Посмотреть сообщение
ZLOI, сделай явное преобразование
C++
1
2
3
4
5
6
7
hThread = CreateThread( 
            NULL,              
            0,                 
            (LPTHREAD_START_ROUTINE)KillCS,        
            0,             
            0,                 
            &dwThreadId);
Спасибо, вчера тоже дошёл, работает.
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
if(0==wcscmp(Entry.szExeFile,L"czero.exe"))
Нет меня интересовало именно без функций дополнительных.
Взял и сравнил какую-нибудь "строку" с переменной.
Типа
C++
1
if (a=="Hello World?")
Добавлено через 3 минуты 34 секунды
Цитата Сообщение от Rififi Посмотреть сообщение
ZLOI,
разве это гибко вставлять такие ограничения.
Зачем они нужны?

это называется жесткой типизацией.
Чтобы код у всех был одинаковый?
Цитата Сообщение от Rififi Посмотреть сообщение
Объясните почему не сравниваются строки?
потому что в C/C++ строк нет.
Ну понято, что char* это ссылка, но на строку же... ну хорошо на массив символов
А массив символов называется строкой.

Добавлено через 13 минут 17 секунд
Кстати, программу написал, проверена в полевых условиях. Если хотите,
чтобы у Вас на работе не играли в Counter-Strike, то в тихушку пропишите в реестре по адресу
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run новую строковую переменную с адресом программы, лучше конечно переделать под сетевую версию, но на моей кафедре так не получится, сервак постоянно выключен:
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
// ANTIHL.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <stdlib.h>
#include <cstdio>
#include <string.h>
#include <process.h>
#include <stddef.h>
#include <wincon.h>
 
void KillCS(void)
{
    while(1==1)
    {
    HANDLE hSnapshot;
    PROCESSENTRY32 Entry;
    Entry.dwFlags = sizeof( PROCESSENTRY32 );
 
     // создаем моментальный снимок
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    // получаем информацию о первом процессе
    Entry.dwSize = sizeof(Entry);
    // перечисляем остальные процессы и уничтожаем неугодные
    do
    {    
        if ((wcscmp(Entry.szExeFile,L"czero.exe")==0)||(wcscmp(Entry.szExeFile,L"hl.exe")==0))
            TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS,true,Entry.th32ProcessID),0);
    }
    while (Process32Next(hSnapshot, &Entry));
 
    CloseHandle(hSnapshot);
    }
    
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    //Устанавливаем низкий приоритет текущему процессу
    SetPriorityClass(GetCurrentProcess(),IDLE_PRIORITY_CLASS);
    
    //Создаём поток, который будет убивать Counter-strike
    DWORD dwThreadId;
    HANDLE hThread; 
    hThread = CreateThread( 
    NULL,              
    0,                 
    (LPTHREAD_START_ROUTINE)KillCS,        
    0,             
    0,                 
    &dwThreadId);   
    
    //Объявляем ВАЖНУЮ функцию, которой нет в чёртовом MVS
    typedef HWND (WINAPI *GetConsoleWindowT)(void);
    HMODULE hk32 = GetModuleHandle(L"kernel32.dll");
    GetConsoleWindowT GetConsoleWindow = (GetConsoleWindowT)GetProcAddress(hk32,"GetConsoleWindow");
    HWND hConsole = GetConsoleWindow();
 
    //Скрываем наше консольное приложение
    ShowWindow(GetConsoleWindow(),SW_HIDE);
    
    //Ставим самый низкий приоритет для потока
    SetThreadPriority(hThread,THREAD_PRIORITY_LOWEST);
 
    //Ожидаем завершение потока
    WaitForMultipleObjects(1, &hThread, TRUE, INFINITE);
 
    //Возвращаем 0 :)
    return 0;
}
//Автор: Устинов Юрий или ZLOI
0
Шерсть-На-Носу
41 / 41 / 1
Регистрация: 30.01.2009
Сообщений: 168
18.05.2009, 17:07 #8
потому что в C/C++ строк нет.
В С++ строки есть. STL входит в стандарт С++, а в ней есть класс string.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
18.05.2009, 18:29 #9
Цитата Сообщение от Шерсть-На-Носу Посмотреть сообщение
В С++ строки есть. STL входит в стандарт С++, а в ней есть класс string.
так скажем неклассового типа нет
0
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
18.05.2009, 18:34 #10
Шерсть-На-Носу,
В С++ строки есть. STL входит в стандарт С++, а в ней есть класс string.
как наличие класса string поможет сравнению указателей или массивов символов?
0
Шерсть-На-Носу
41 / 41 / 1
Регистрация: 30.01.2009
Сообщений: 168
18.05.2009, 19:38 #11
Если хотите, чтобы у Вас на работе не играли в Counter-Strike
Если догадаются сменить имя exe-шника, не поможет
0
ZLOI
0 / 0 / 0
Регистрация: 17.05.2009
Сообщений: 7
20.05.2009, 14:31  [ТС] #12
Цитата Сообщение от Шерсть-На-Носу Посмотреть сообщение
Если догадаются сменить имя exe-шника, не поможет
А Вы попробуйте его сменить.
В новой версии программа скрывается в диспетчере задач, а в потоке стоит Sleep на 100 миллисекунд, что не позволяет её обнаружить ALT+CTRL+DEL и процессорное время тратится 0.
Теперь осталось сделать вирусную версию и разослать по всему миру

Дальше будут одноклассники и т.п.

Вот подскочит производительность труда.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.05.2009, 14:50 #13
прально, давно пора)
0
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
20.05.2009, 18:15 #14
Не знаю, каким образом у нас на работе боролись с CS, но смена имени экзешника решила проблему ))))))
Хотел вопрос по делу задать: а каким образом программа "скрыта в диспечере задач"? Какой именно кусок кода обеспечивает это? Что-то не могу сообразить.
0
Шерсть-На-Носу
41 / 41 / 1
Регистрация: 30.01.2009
Сообщений: 168
20.05.2009, 19:54 #15
А Вы попробуйте его сменить.
Да я hl.exe имел в виду, вон Deicider меня правильно понял

Тут надо службу писать, работающую в режиме ядра. И она должна иметь список разрешенных программ, а все остальные рубить.

Добавлено через 21 минуту 46 секунд
Про разработку служб можно вот здесь почитать:

Рихтер, Кларк. "Программирование серверных приложений" (2001)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2009, 19:54
Привет! Вот еще темы с ответами:

проверьте кто-нибудь - C++
я давно как-то создавал тему дек через массив.там в конце я написал что вроде прога рабоатет. через несколько дней я запустил её - вроде...

кто нибудь из программистов знает? - C++
Кто нибудь из программистов знает, а то я запарился искать книги (вернее задачи) на классы, указатели,обьекты и т.д. В интернете очень...

ну кто нибудь составит программу???????? - C++
ну кто нибудь составит программу????????ну кто нибудь составит программу????????ну кто нибудь составит программу????????ну кто нибудь...

Кто-нибудь реализовывал класс множество? - C++
Нужно реализовать данный класс, я без понятия каким образом, пока написал только имена функций и сам класс. Там должны быть функции...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
20.05.2009, 19:54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru