Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Неубиваемая программа (https://forum.antichat.xyz/showthread.php?t=93585)

_nic 26.11.2008 13:53

Неубиваемая программа
 
Я решил пойти по самому простому пути и сыграть на том что в стандартном виндосовском "диспетчере задачь" нельзя убить одновременно 2 приложения.Пытаюсь сделать так что бы программа запускала свою копию которая бы следила сколько её копий запущенно и в случае когда она одна остается запустить ещё раз свою копию.
Пытаюсь делать вот так
Код:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
char fnm[400];
GetModuleFileName(NULL,fnm,400);
SetLastError(0);
CreateEvent(NULL, FALSE, FALSE, TEXT("ProgName_started"));
if (GetLastError() != ERROR_ALREADY_EXISTS)
{
ShellExecute(Form1->Handle,NULL,fnm,NULL,NULL,SW_HIDE);
}
Form1->Hide();
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
for(;;)
{
Sleep(300);
SetLastError(0);
CreateEvent(NULL, FALSE, FALSE, TEXT("ProgName_started"));
if (GetLastError() != ERROR_ALREADY_EXISTS)
{
ShellExecute(Form1->Handle,NULL,fnm,NULL,NULL,SW_HIDE);
break;
}
}
Form1->Show();
}
}

Но не получается уследить за изменением количества запущенных копий программы.
Может кто то что посоветует?
ЗЫ:не откажусь от примера с иньектом потока в системный процесс,который в случае чего будет перезапускать программу.

Jes 26.11.2008 15:09

NtQuerySystemInformation или ToolHelp тебе в помощь ...

хотя имхо удобнее просто засплайсить TerminateProcess , KillProcess и им подобные

LEE_ROY 26.11.2008 15:43

сплайс палитсо проактивкаме =\

Pernat1y 26.11.2008 17:06

taskkill /im process.exe /f
грохнет все process.exe довольно быстро. процесс может неуспеть зареспавниться )

0verbreaK 26.11.2008 17:24

Кстате NtQuerySystemInformation и есть ToolHelp функции все вместе взятые.

W!z@rD 26.11.2008 17:39

p.s. назови ее smss к примеру или winlogon (ее это исполняемый файл)
хорошая защита от дурака...

LEE_ROY 26.11.2008 17:45

Цитата:

Сообщение от Pernat1y
taskkill /im process.exe /f
грохнет все process.exe довольно быстро. процесс может неуспеть зареспавниться )

тогда ТС при запуске прога пусть удалит taskkill из системы ;)

_nic 26.11.2008 21:16

Цитата:

Сообщение от W!z@rD
p.s. назови ее smss к примеру или winlogon (ее это исполняемый файл)
хорошая защита от дурака...

Это такой аккардеон ,что на него орут проактивки большинства антивирей :(
ЗЫ:я так и непонял как отследить то что кол-во запущенных копий стало меньше 2х?

_antony 26.11.2008 23:19

почему бы просто не перехватить NtTerminateProcess ?

0verbreaK 27.11.2008 00:40

_nic Тебе Jes выше сказал что используются ToolHelp функции
http://msdn.microsoft.com/en-us/library/ms851517.aspx


Время: 16:04