Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7
  Alt 20. Jul 2002, 12:08
Ich habe da so eine Funktion gefunden, mit der man sich das Recht ergattert, in einem anderen Prozess herumzufuhrwerken. Rufe diese Funktion einmal auf, bevor du enumTrayIcons() aufrufst. Es könnte damit unter WinXP funktionieren (habe es nicht ausprobiert), aber dann nur unter WinNT/2k/XP.
Code:
procedure EnableDebugPriv;
var
  hToken: THandle;
  sedebugnameValue: Int64;
  tkp: TTokenPrivileges;
  ReturnLength: Cardinal;
begin
  // enable the SeDebugPrivilege
  if (not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) then
    raise Exception.CreateFmt('OpenProcessToken() failed, Error = %d SeDebugPrivilege is not available.', [GetLastError]);

  try
    if (not LookupPrivilegeValue(nil, SE_DEBUG_NAME, sedebugnameValue)) then
      raise Exception.CreateFmt('LookupPrivilegeValue() failed, Error = %d SeDebugPrivilege is not available.', [GetLastError]);

    tkp.PrivilegeCount := 1;
    tkp.Privileges[0].Luid := sedebugnameValue;
    tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

    ReturnLength := 0;
    if (not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), nil, ReturnLength)) then
      raise Exception.CreateFmt('AdjustTokenPrivileges() failed, Error = %d SeDebugPrivilege is not available.', [GetLastError]);

  finally
    CloseHandle(hToken);
  end;
end;
  Mit Zitat antworten Zitat