|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Убить процесс без окна
Добрый вечер.
Возникла такая проблема, нужно убивать процессы через делфи. Но не все так просто, перепробовал все, TerminateProcess, KillTask, killprocess и прочие непомогают. Диспетчер задач нормально убивает все процессы, но все перечисленные мной функции удаляют только те процессы, которые имеют окно. Как можно убить процесс в делфи который не имеет окна? Вот к примеру список процессов Код:
SbieSvc.exe spoolsv.exe ctfmon.exe wcescomm.exe rapimgr.exe FABS.exe hamachi-2.exe hsswd.exe jqs.exe mdm.exe sqlservr.exe mysqld.exe netdde.exe locator.exe TeamViewer_Service.exe ufdsvc.exe WebCamPlusSrv.exe WLIDSVC.EXE wscntfy.exe alg.exe WLIDSVCM.EXE TeamViewer.exe tv_w32.exe wuauclt.exe Все эти процессы спокойно убиваются в диспетчере, но не убиваются через перечисленные мной функции. Как убить любой процесс? даже тот который не имеет окна? |
#2
|
||||
|
||||
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
||||
|
||||
у меня всё и по taskkill /f /im <процесс> убивается
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#4
|
||||
|
||||
Все разобрался.
Подействовала только эта функция, автор не я. Код:
function ProcessTerminate(dwPID:Cardinal):Boolean; var hToken:THandle; SeDebugNameValue:Int64; tkp:TOKEN_PRIVILEGES; ReturnLength:Cardinal; hProcess:THandle; begin Result:=false; // Добавляем привилегию 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; // Добавляем привилегию к нашему процессу AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength); if GetLastError()<> ERROR_SUCCESS then exit; // Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем // завершить и системный процесс // Получаем дескриптор процесса для его завершения hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID); if hProcess =0 then exit; // Завершаем процесс if not TerminateProcess(hProcess, DWORD(-1)) then exit; CloseHandle( hProcess ); // Удаляем привилегию tkp.Privileges[0].Attributes := 0; AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength); if GetLastError() <> ERROR_SUCCESS then exit; Result:=true; end; Убивает любой процесс напроч, даже системный. |