Страница 1 из 1
Как убить процесс порожденный другим пользователем
Добавлено: 30 окт 2006, 09:58
Except
Требуется убить процесс, известно имя exeшника процесса.
Код взят из FAQ. Убиваются все процессы кроме тех которые порождены другими пользователями, при попытке убить последние происходит исключение. Помогите кодом или направьте в нужном направлении.
Добавлено: 30 окт 2006, 10:08
Duncon
Попробуй так
Код: Выделить всё
// Включение, приминение и отключения привилегии.
// Для примера возьмем привилегию отладки приложений 'SeDebugPrivilege'
// необходимую для завершения ЛЮБЫХ процессов в системе (завершение процесов
// созданных текущим пользователем привилегия не нужна.
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;
Добавлено: 30 окт 2006, 10:21
Except
спасибо попробую, скажу что получилось
Добавлено: 31 окт 2006, 07:32
Dr_Grizzly
PostMessage(FindWindow(Nil, 'window caption'), WM_QUIT, 0, 0); попрбуй через эту функцию, по заголовку окна можно закрыть приложение
Добавлено: 31 окт 2006, 09:10
Duncon
Dr_Grizzly ему нужно чужие приложения закрывать а не текущего пользователя..