Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.21;
Скачать: CL | DM;

Вниз

Закрыть процесс?   Найти похожие ветки 

 
igorok ©   (2002-01-20 17:05) [0]

Уважаемые мастаки... Я читаю список процессов...
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

Теперь список у меня есть... имена ЕХЕ файлов... ну а как мне закрыть/убить (желательно безглючно и 100%-но) заданый процесс из этого списка?
Большое пасибо.


 
gluka ©   (2002-01-21 04:18) [1]

1)GetExitCodeProcess;
2)TerminateProcess;

А вообще желательно получить Дебаг привилегию и можно килить даже системные процесы!!!


 
Fellomena   (2002-01-21 12:06) [2]

Для уничтожения других процессов тебе нужно не название файла, а идентификатор процесса, который ты хочешь прекратить, который ты получил с помощью CreateToolhelp32Snapshot.
А потом используй Terminate и всё. Правда, таким образом небезопасно прекращать работу - данные, связынные с данным процессом могут быть утеряны, а в памяти может остаться мусор...

gluka:
Что значит debug-привелегию: ring1 что ли ?
Ну не знаю, я kernell.dll и Explorer выгружала успешно и так 8)
Последствия этого вандализма, думаю, ясны :)


 
MrAngel ©   (2002-01-21 12:15) [3]

igorok © есть совет -- используй EndTask/ если не ошибаюсь то она прописана в USER32.DLL .


 
VuDZ ©   (2002-01-22 00:42) [4]

100% гарантия сметри:
1. получаем PID
2. получаем привилегии на запись в этот процесс и OpenProcess()
3. void * v = WriteProcessMemory()
4. CreateRemoteThread()
и данный процесс вырубается мгновенно, но при этом появляется стандартная мессага, что типа недопустимая ошибка :)


 
Raptor ©   (2002-01-22 11:45) [5]

2igorok
Юзай TerminateProcess. Он требует hProcess. Это хендл процесса. Его можна получить с помощьо функции OpenProcess. Эта функция требует ProcessId. Его получаешь из структуры PROCESSENTRY32, указатель на которую дает функция Process32Firs или Process32Next.

2Fellomena
>>Ну не знаю, я kernell.dll и Explorer выгружала успешно и так 8)
Под какими это виндами? Попробуй под WinNT/2k/XP. Интересно узнать, что у тебя получится. :-))


 
Fellomena   (2002-01-22 11:58) [6]

2 Raptor: под 98, это приводит к останову работы (но без "Завершение работы Windows" ;)


 
Raptor ©   (2002-01-22 23:16) [7]

2 Fellomena
под 98, это приводит к останову работы (но без "Завершение работы Windows" ;)

Дык, ясен перец. Ты же ядро убиваешь. :-))
Но это я к тому, что с помощью TerminateProcess без соответствующих прав ядро (Kernel32.dll) можна убить только в Win9x. А в таких системах как WinNT/2k/XP ничего у тебя не выйдет. Здесь на это надо иметь соответствующие права.


 
gluka ©   (2002-01-23 01:32) [8]

> Raptor
>А в таких системах как WinNT/2k/XP ничего у тебя не выйдет. >Здесь на это надо иметь соответствующие права.


procedure TerminateProcess;

var
hToken:THandle;
sedebugnameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
//Получаем SeDebugPrivilege
// Получаем дескриптор нашего процесса
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken )
then exit;


// Получаем LUID привилегии
if not LookupPrivilegeValue( nil, "SeDebugPrivilege", sedebugnameValue )
then begin
CloseHandle(hToken);
exit;
end;

tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Luid := sedebugnameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;


// Добавляем привилегию к нашему процессу
if not AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength)
then showmessage("Ошибка при получении Debug-привилегиии");
CloseHandle( hToken );


// Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем завершить и системный процесс
// Получаем дескриптор процесса для его завершения
hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, StrToInt(Edit1.Text));
if hProcess =0

then showmessage("Wrong Handle")
else
// Завершаем процесс
if not TerminateProcess(hProcess, DWORD(-1))

then showmessage("Couldn""t terminate process")

else showmessage("Process was terminated successfully");
CloseHandle( hProcess );
end;



Страницы: 1 вся ветка

Текущий архив: 2002.03.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
1-66868
webbyte
2002-03-04 09:21
2002.03.21
Есть ли в дельфи аналог паскалевской exec?то есть можно ли из приложения выполнить комманду в ком.строке?


14-66962
Вячеслав
2002-02-06 15:11
2002.03.21
RX от Polaris-а


1-66830
Gayrus
2002-03-07 16:20
2002.03.21
Form s events


1-66818
tovSuhov
2002-03-07 11:05
2002.03.21
Вот такой вопрос по QuickRep...


1-66899
Alex Sm
2002-03-06 10:34
2002.03.21
control characters