Как завершить любой процесс, в том числе и системный

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Женщина спрашивает совета у доктора: — Доктор,мой 17-летний сын так увлекся компьютером,что даже спит возле него.Как его отучить? — Очень просто! Вино, водка, сигареты, женщины …

// Включение, приминение и отключения привилегии.

// Для примера возьмем привилегию отладки приложений ‘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;

// Название добавление/удаление привилгии немного неправильные. Привилегия или

// есть в токене процесса или ее нет. Если привилегия есть, то она может быть в

// двух состояниях — или включеная или отключеная. И в этом примере мы только

// включаем или выключаем необходимую привилегию, а не добавляем ее.

{/codecitation}

Добавить комментарий