void SetPrivilege()
{
TOKEN_PRIVILEGES TP;
LUID luid;
HANDLE hToken;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);
TP.PrivilegeCount = 1;
TP.Privileges[0].Luid = luid;
TP.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &TP, sizeof(TP), NULL, NULL);
CloseHandle(hToken);
}
int main()
{
SetPrivilege();
return 0;
}
Procedure SetPrivilege;
var
TP : TTokenPrivileges;
luid : TLargeInteger;
hToken : THandle;
ReturnLength: DWord;
begin
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken);
LookupPrivilegeValue(nil, 'SeDebugPrivilege', luid);
TP.PrivilegeCount := 1;
TP.Privileges[0].Luid := luid;
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, TP, SizeOf(TP), nil, ReturnLength);
CloseHandle(hToken);
If (GetLastError() = ERROR_NOT_ALL_ASSIGNED) Then
begin
ShowMessage('The token does not have one or more of the privileges specified in the NewState parameter.');
end;
end;