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

Вниз

Убить запущенный процесс.   Найти похожие ветки 

 
GhosTer   (2007-08-02 17:01) [0]

Есть такой вопросик:
Нужно просмотреть запущен ли процесс и если он запущен то его нужно убить.
Даже примерно не знаю как это сделать!
Скажите как. ПЛИИИИИЗ!


 
Dib@zol ©   (2007-08-02 17:06) [1]

Так?

uses Tlhelp32;
....
function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;

FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);

while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle,
FProcessEntry32);
end;

CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
KillTask("Wn.exe");
end;

Что же насчёт того запущен или нет - это попробовать переименовать тестируемый файл. Если запущен - сгенерицца рантайм. В противном случае переименовывай обратно :)


 
DVM ©   (2007-08-02 17:17) [2]


> Dib@zol ©   (02.08.07 17:06) [1]
> Так?

1) Хэндлы закрывать надо.
2) С русскими именами проблемы будут.


> Что же насчёт того запущен или нет - это попробовать переименовать
> тестируемый файл. Если запущен - сгенерицца рантайм. В противном
> случае переименовывай обратно :)

А если доступ к файлу только чтение?


 
Dib@zol ©   (2007-08-02 17:20) [3]

> А если доступ к файлу только чтение?

{$I-}, переименование, сличение имени проги и строки, по к-рой переименовали. Если идентичны - обратное переименование. У меня с этой директивой даж ридонли файлы и удалялись, и разрешалась запись...


 
DVM ©   (2007-08-02 17:23) [4]


> ридонли файлы и удалялись, и разрешалась запись...

Я про права доступа к файлу в NTFS - только чтение.


 
Dib@zol ©   (2007-08-02 17:26) [5]

> Я про права доступа к файлу в NTFS - только чтение.

Ох туж этот чортоф NTFS. Жили бы все как я с 98-ым и программеры горя бы не знали! А если права получить? Щас может у себя процедурку найду...


 
Инс ©   (2007-08-02 17:29) [6]


> Что же насчёт того запущен или нет - это попробовать переименовать
> тестируемый файл. Если запущен - сгенерицца рантайм. В противном
> случае переименовывай обратно :)


Бред. Проверить, запущен процесс или нет, можно с помощью тех же ToolHelp.


 
DVM ©   (2007-08-02 17:29) [7]


> А если права получить?

А если программа запускается не из под аккаунта администратора?
А если программа запускается с сетевого диска и там доступ только чтение?
А если программа запускается с флоппи-диска или другого диска с переключателем только чтение?

Продолжать?


 
Dib@zol ©   (2007-08-02 17:30) [8]

> [7] DVM ©   (02.08.07 17:29)

> Ох туж этот чортоф NTFS.


 
Инс ©   (2007-08-02 17:30) [9]


> Щас может у себя процедурку найду...


Найдете процедурку, как под ограниченной учеткой открыть файл вопреки DACL? :)) Ню-ню...


 
DVM ©   (2007-08-02 17:31) [10]


> Dib@zol ©

Более того, файл запущенной программы легко переименуется!


 
Dib@zol ©   (2007-08-02 17:35) [11]

> Найдете процедурку, как под ограниченной учеткой открыть
> файл вопреки DACL? :)) Ню-ню...

А руткиты? Вон в хакере за прошлый месяц оч обстоятельная статейка была... Мож годика через полтора (непрерывного кодинга) и напишу :)


 
Dib@zol ©   (2007-08-02 17:36) [12]

> Более того, файл запущенной программы легко переименуется!

ПРАВДА? Это типа такой виндовый баг? Да основываясь на этом тыщу вирей можно написать!!!
ЗЫ Ну БГ, ну отмочил :)))


 
Инс ©   (2007-08-02 17:37) [13]


> 1) Хэндлы закрывать надо.


Так ведь код явно из фака какого-то низкокачественного. А там на такие мелочи не раскошеливаются ;) Да и привилегию отладчика на всякий случай получить не помешало бы...


 
DVM ©   (2007-08-02 17:39) [14]


> Dib@zol ©   (02.08.07 17:36) [12]

Каким образом ты это собираешься сделать? Он ведь только переименован быть может, удалить или заменить его все равно не выйдет.


 
Инс ©   (2007-08-02 17:39) [15]


> ПРАВДА? Это типа такой виндовый баг?


А что в этом страшного?


 
Инс ©   (2007-08-02 17:42) [16]


> удалить или заменить его все равно не выйдет.


Тут недавно обсуждалось, как удалить самого себя, без всяких там батников... В общем, геморно, но реально. Если вкратце, то выделить память, записать туда код удаления, запустить его, а образ exe-шника анмэпить.


 
Dib@zol ©   (2007-08-02 17:42) [17]

> Каким образом ты это собираешься сделать?

Переименовываем kernel32.dll в kernell32.dll... Ну?


 
GhosTer   (2007-08-02 17:44) [18]

Огромное спасибо!
А как узнать где находится этот запущенный файл, и определить от имени какого пользователя он запущен?


 
Инс ©   (2007-08-02 17:59) [19]


> GhosTer   (02.08.07 17:44) [18]


Поищите статьи по ToolHelp все-таки. Очень рекомендую... Плюс см OpenProcessToken, GetTokenInformation, LookupAccountSid


 
Инс ©   (2007-08-02 18:03) [20]


> Ну?


Ну?


 
GhosTer   (2007-08-02 18:21) [21]

Спасибо! Посмотрю! А где смотреть помими МСДН! Вот поставил что-то всего столько!



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

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

Наверх




Память: 0.52 MB
Время: 0.024 c
2-1185733123
__Types
2007-07-29 22:18
2007.08.26
Удалить часть.


2-1185615743
Alex8
2007-07-28 13:42
2007.08.26
SQL


2-1185363784
TruePunk
2007-07-25 15:43
2007.08.26
записи на рабочем столе


15-1185522868
Alkid
2007-07-27 11:54
2007.08.26
Зараза vs. Virtual Machine


15-1185772722
boriskb
2007-07-30 09:18
2007.08.26
Поздравим.