Включение, приминение и отключения привилегии. Для примера возьмем привилегию отладки приложений 'SeDebugPrivilege'

необходимую для завершения ЛЮБЫХ процессов в системе (завершение процесов созданных текущим пользователем привилегия не нужна.

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

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

 

Code:

 

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;

 

 

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

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить