Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007
// Включение, приминение и отключения привилегии.
 
// Для примера возьмем привилегию отладки приложений '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;
 
 
// Название добавление/удаление привилгии немного неправильные.  Привилегия или
 
// есть в токене процесса или ее нет. Если привилегия есть, то она может быть в
 
// двух состояниях - или включеная или отключеная. И в этом примере мы только
 
// включаем или выключаем необходимую привилегию, а не добавляем ее.

Взято с https://delphiworld.narod.ru