Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как програмно завершить процесс ? [D7, WinXP]


Delphin ©   (2004-02-15 20:11:00) 

Hi ALL! Как пронрамно завершить процесс?
Если убить чужое приложение можно так:

Var
h:HWND;

H:=FindWindow(nil,'Windows Media Player');
IF H<>0 Then
SendMessage(H, WM_Destroy, 0, 0);
То как можно убить сам процесс ?


Игорь Шевченко   (2004-02-27 16:55:00) [1]

Delphin ©   (27.02.04 16:53)

Ты не с того начинаешь, уж извини. Задача антивируса - не процессы убивать и не System Restore отключать. Задача его препятствовать проникновению вирусов на компьютер, а не бороться с последствиями этого проникновения.


Delphin   (2004-02-27 16:53:00) [2]

Игорь Шевченко ©   (26.02.04 19:35) [14]
Стоит Noroton 2003 + Firewall- Agnitum Outpost Firewall
Мне просто интересно написать простейший антивирусник


Игорь Шевченко   (2004-02-26 19:35:00) [3]

Антивирус поставь


Delphin   (2004-02-26 19:30:00) [4]

Игорь Шевченко ©   (26.02.04 18:09) [12]
Не, это я к примеру, на самом деле планируется убивать что-то на подобии msblast или svchos1


Игорь Шевченко   (2004-02-26 18:09:00) [5]

Delphin ©   (26.02.04 17:46)

Какими-то нехорошими вещами ты занимаешься. svchost убиваешь...


Delphin   (2004-02-26 17:46:00) [6]

Всё отлично, вот только если само приложение не имеет ни одной формы, то как тогда поступать ?


Phantomaz   (2004-02-25 19:08:00) [7]

procedure KillProcess;
var
 H             : HWND:
 PrID          : Cardinal;
 ProcessHandle : THandle;  
begin
 H:=FindWindow(nil,'Windows Media Player');
 GetWindowThreadProcessID(H, @PrID);
 // Открываем Handle
 ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, PrId);
 TerminateProcess(ProcessHandle,0);
 // Закрываем Handle
 CloseHandle(ProcessHandle);
end;


juicenman   (2004-02-18 22:05:00) [8]

The TerminateProcess function terminates the specified process and all of its threads. Все очень просто.


Delphin   (2004-02-18 15:58:00) [9]

Есть сабж на С++ (простой Процесс мэнеджер, он показывает все процесы в системе), вот только я не особо силён в С++, могу понять только половину из этого сабжа.

А идея у меня примерно такая: Получить список всех процессов, если есть нужный мне процесс, то уничтожить его (тут я думаю, что можно запустить бесконечный цикл на поиск данной процедуры, если она сушествует, то завершить процесс, по хору дела удалить сам *.exe вражеского приложения, а после очистить реестр)
Сабж:

#include
#include
#include "resource.h"

#pragma comment(linker,"/MERGE:.rdata=.text")  
#pragma comment(linker,"/SECTION:.text,EWRX")
#pragma comment(linker,"/ENTRY:WinMain")  

HANDLE hThread,hProcess;
DWORD dwlist[64];
int ind;
bool endthread = true;

void EnableDebugPrivilege(bool fEnable){
  HANDLE hToken;
  if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)){
     TOKEN_PRIVILEGES tp;
     tp.PrivilegeCount = 1;
     LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
     tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
     AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
     CloseHandle(hToken);
  }
}

DWORD __stdcall ListPID(LPVOID _hwnd){
HWND hwnd = (HWND)_hwnd;
EnableDebugPrivilege(true);

 int count = 0;
 HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
 PROCESSENTRY32 pe32 = {0};
 pe32.dwSize = sizeof(PROCESSENTRY32);
 Process32First(hSnap,&pe32);
 do {
  dwlist[count++] = pe32.th32ProcessID;
  SendMessage(hwnd, LB_ADDSTRING, 0, (LPARAM)pe32.szExeFile);
  SendMessage(hwnd, LB_SETCURSEL, (WPARAM)SendMessage(hwnd, LB_GETCOUNT, 0, 0)-1, 0);
 } while (Process32Next(hSnap, &pe32));

return TRUE;
}

int __stdcall Dlg_Proc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
switch (wMsg){
case WM_INITDIALOG:
 hThread = CreateThread(0, 0, ListPID, (LPVOID)GetDlgItem(hwnd,IDC_LIST1), 0, 0);
 break;
case WM_CLOSE:
 endthread = false;
 EndDialog(hwnd,1);
 break;
case WM_COMMAND:
 switch (LOWORD(wParam)) {
 case IDC_BUTTON1:
  ind = SendDlgItemMessage(hwnd, IDC_LIST1, LB_GETCURSEL, 0, 0);
  hProcess = OpenProcess (PROCESS_ALL_ACCESS, false, dwlist[ind]);
  TerminateProcess(hProcess, -9);
  CloseHandle(hProcess);
  break;
 }
 break;
}
return false;
}

int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG1), 0, Dlg_Proc);
return 0;
}


Delphin   (2004-02-18 15:53:00) [10]

BlackBaracuda ©   (17.02.04 16:30) [5]
Если быть точнее, то написать утилиту по удалению такой гадости (у меня на второй машине сидит такая бяка: имя Svchos1.exe, Размер: около 70 Кб, Сидит в C:\WINDOWS\system32, сама вырубает антивирусник, Firewall, при открытии реестра сама его закрывает, при завершении процесса снова его возобновляет:), в принципе можно удалить из под доса, но это не совсем интересно, для меня больший интерес составит написать утилиту для удаления таких тварей. У меня тут в локальной сети компьютеров штук 30, из них примерно 25 заразные, во казлов то развелось, это надо быть полностью слепым чтобы не заметить прибывание вражеского приложения. Однако самое весёлое, что у Касперского на сайте я не нашёл не одного подобного описания к вирусу. Хотя он проявляет себя также, как и msblast, и распостраняеться не по почте, скорее всего через Exploit в системе. ( я на ту машину только установил винду и антивирусник, тут решил сделать Update для всего этого дела, как тут-же заразился)


KosilkA   (2004-02-17 18:20:00) [11]

terminateprocess... блин :-))))


BlackBaracuda   (2004-02-17 16:30:00) [12]

Ты что, хочешь как Lovesan?
Я тоже так хочу, так скажите как убить процесс?


Alexander666   (2004-02-16 00:56:00) [13]


> Defunct ©   (15.02.04 20:37) [1]
> H := Application.Handle?

Как так... или у меня крыша уже едет?!


Alexander666   (2004-02-16 00:54:00) [14]

Смотри статью в РСДН, правда там сях...


Delphin   (2004-02-15 23:10:00) [15]

Defunct ©   (15.02.04 20:37) [1] Ну напрмер svchost, тоесть совершенно чужой


Defunct   (2004-02-15 20:37:00) [16]

H := Application.Handle?

> То как можно убить сампроцесс ?
О каком процессе идет речь?


Наверх

Титульная страница Поиск, карта сайта Написать письмо