procedure SetPrivilege;

var

OldTokenPrivileges, TokenPrivileges: TTokenPrivileges;

ReturnLength: dword;

hToken: THandle;

Luid: int64;

begin

OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);

LookupPrivilegeValue(nil, 'SeDebugPrivilege', Luid);

TokenPrivileges.Privileges[0].luid := Luid;

TokenPrivileges.PrivilegeCount := 1;

TokenPrivileges.Privileges[0].Attributes := 0;

AdjustTokenPrivileges(hToken, False, TokenPrivileges, SizeOf(TTokenPrivileges), OldTokenPrivileges, ReturnLength);

OldTokenPrivileges.Privileges[0].luid := Luid;

OldTokenPrivileges.PrivilegeCount := 1;

OldTokenPrivileges.Privileges[0].Attributes := TokenPrivileges.Privileges[0].Attributes or SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, False, OldTokenPrivileges, ReturnLength, PTokenPrivileges(nil)^, ReturnLength);

end;