Установка или снятие Debug привелегии у текущего процесса

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

Автор: Мироводин Дмитрий

WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****

>> Установка/снятие Debug привелегии у текущего процесса

Функция устанавливает/снимает отладочные привелегии у текущего процесса

(можно выбрать и другой, изменив GetCurrentProcess на нужный Handle ).

Актуально для совместного использования с ToolHelp —

т.е. получения информации о процессах.

Зависимости: Windows

Автор: Мироводин Дмитрий (адаптация), mirovodin@mail.ru

Copyright: 2000 Jeffrey Richter

Дата: 20 октября 2003 г.

***************************************************** }

function EnableDebugPrivilege(const Value: Boolean): Boolean;

const

SE_DEBUG_NAME = ‘SeDebugPrivilege’;

var

hToken: THandle;

tp: TOKEN_PRIVILEGES;

d: DWORD;

begin

Result := False;

if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) then

begin

tp.PrivilegeCount := 1;

LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid);

if Value then

tp.Privileges[0].Attributes := $00000002

else

tp.Privileges[0].Attributes := $80000000;

AdjustTokenPrivileges(hToken, False, tp, SizeOf(TOKEN_PRIVILEGES), nil, d);

if GetLastError = ERROR_SUCCESS then

begin

Result := True;

end;

CloseHandle(hToken);

end;

end;

Пример использования:

// После этого можно смотреть информацию о таких системных

// модулях как: winlogon.exe и servises.exe и д.р.

EnableDebugPrivilege(True); // вкрючить

EnableDebugPrivilege(False); // выключить

{/codecitation}

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