Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 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;



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

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

Наверх





Память: 0.46 MB
Время: 0.005 c
4-67057
guliver
2002-01-11 03:59
2002.03.21
Инсталляция


7-67019
Dr. Web
2001-12-04 08:55
2002.03.21
Voice modem


1-66824
MetallAdm
2002-03-07 12:59
2002.03.21
Ну просто ламерский вопрос :))


1-66862
Kettle of delphi
2002-03-04 17:05
2002.03.21
Подскажите пожалуйста! Код TForm2.Create(nil) вовсе не помещает создаваемую форму на панель задач! (он ее помещает на РАБОЧИЙ СТОЛ)


3-66743
draculenok
2002-02-20 07:49
2002.03.21
Отчет по нескольким линиям TMemo!!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский