关于SeDebugPrivilege令牌

时间:2019-01-03 19:38:23

标签: delphi

我有一个问题。

如何在已经被另一个程序删除的进程中创建SeDebugPrivilege令牌?

var
  NewState      : TTokenPrivileges;
  luid          : TLargeInteger;
  hToken        : THandle;
  ReturnLength  : DWord;
begin
  OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken);

  LookupPrivilegeValue(nil, 'SeDebugPrivilege', luid);

  Memo1.Lines.Add(Format('Luid [%d]', [luid]));

  NewState.PrivilegeCount           := 1;
  NewState.Privileges[0].Luid       := luid;
  NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

  AdjustTokenPrivileges(hToken, False, NewState, SizeOf(NewState), nil, ReturnLength);
  CloseHandle(hToken);

此代码可以启用/禁用令牌(如果已经存在),但是如果令牌被删除,则不会再次添加。这就是我所需要的。

我问它是因为我不知道您是否知道名为Deep Freezer的程序,他从所有正在运行的进程中删除了SeDebugPrivilege特权。

谢谢。

0 个答案:

没有答案
相关问题