Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Вниз

Закрыть процесс? 


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;




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.03 c
3-66786           AAAPLE                2002-02-22 14:19  2002.03.21  
DBGrid и Query


3-66793           kvcomp                2002-02-23 15:04  2002.03.21  
Ошибка в Paradox типа


3-66772           ilysha                2002-02-19 11:38  2002.03.21  
Кто-нибудь работает с MySQL?


1-66811           AndrewK               2002-03-05 11:46  2002.03.21  
QuickReport конфликтует с драйвером принтера


3-66797           Ross                  2002-02-23 15:32  2002.03.21  
Варианты передачи данных в Word