Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Как не допустить второго запуска программы?

Вариант 1

В начале кода программы - до
Application->Initialize();
пишем
hMutex = CreateMutex(NULL,true,"some_big_big_unique_mutex_name");
 
 if (GetLastError()==ERROR_ALREADY_EXISTS)
 
         {
 
         // мы уже есть - ругаемся и выходим
 
         ShowMessage("proga already loaded");
 
         Application->Terminate();
 
         }
В конце пишем
ReleaseMutex(hMutex);
Вариант 2

В начале кода программы пишем
AnsiString AtomName = "some_big_big_unique_atom_name";
 
 ATOM Atom;
 
 
 
 if (GlobalFindAtom(AtomName.c_str()) == 0)
 
         {
 
         // создаём атом
 
         Atom = GlobalAddAtom(AtomName);
 
         }
 
 else
 
         {
 
         // мы уже есть - ругаемся и выходим
 
         ShowMessage("proga already loaded");
 
         Application->Terminate();
 
         }
В конце пишем:
GlobalDeleteAtom(Atom); // удаляем глобальный атом, иначе программа не запустится
Вариант 3

Здесь будет необходимо, чтобы окно Вашей программы имело уникальное имя класса.
В начале кода программы пишем

HWND hWnd = FindWindow("Tformochka",NULL); // ищем своё окно
 
 if (hWnd!=NULL) // если нашли
 
         {
 
         ShowMessage("proga already loaded"); // ругаемся
 
         SetForegroundWindow(hWnd); // активизируем предыдущую копию проги
 
         Application->Terminate(); // закрываемся
 
         }



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS