Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DebugPrivilege wieder loswerden (https://www.delphipraxis.net/45210-debugprivilege-wieder-loswerden.html)

ReDoX 2. Mai 2005 06:22


DebugPrivilege wieder loswerden
 
Hi,
Ist es möglich die DebugPrivilege, die ich mit

Delphi-Quellcode:
function GetDebugPrivilege: boolean; stdcall;
var hToken,rel: cardinal;
    tkp: TOKEN_PRIVILEGES;
    luid: int64;
begin
  result := false;
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
  begin
    if LookupPrivilegeValue(nil, 'SeDebugPrivilege', luid) then
    begin
      tkp.PrivilegeCount           := 1;
      tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      tkp.Privileges[0].Luid       := luid;
      result := AdjustTokenPrivileges(hToken, FALSE, tkp, sizeof(tkp), nil, rel);
    end;
    CloseHandle(hToken);
  end;
end;
bekomme, loszuwerden?
Mfg ReDoX

toms 2. Mai 2005 06:27

Re: DebugPrivilege wieder loswerden
 
Hallo!

Du brauchst nur

Delphi-Quellcode:
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
durch das

Delphi-Quellcode:
tkp.Privileges[0].Attributes := 0;
zu ersetzen.

Luckie 2. Mai 2005 11:25

Re: DebugPrivilege wieder loswerden
 
Delphi-Quellcode:
function EnablePrivilege(const Privilege: string; fEnable: Boolean; out
  PreviousState: Boolean): DWORD;
var
  Token       : THandle;
  NewState    : TTokenPrivileges;
  Luid        : TLargeInteger;
  PrevState   : TTokenPrivileges;
  Return      : DWORD;
begin
  PreviousState := True;
  if (GetVersion() > $80000000) then
    // Win9x
    Result := ERROR_SUCCESS
  else
  begin
    // WinNT
    if not OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, Token) then
      Result := GetLastError()
    else
    try
      if not LookupPrivilegeValue(nil, PChar(Privilege), Luid) then
        Result := GetLastError()
      else
      begin
        NewState.PrivilegeCount := 1;
        NewState.Privileges[0].Luid := Luid;
        if fEnable then
          NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
        else
          NewState.Privileges[0].Attributes := 0;
        if not AdjustTokenPrivileges(Token, False, NewState,
          SizeOf(TTokenPrivileges), PrevState, Return) then
          Result := GetLastError()
        else
        begin
          Result := ERROR_SUCCESS;
          PreviousState :=
            (PrevState.Privileges[0].Attributes and SE_PRIVILEGE_ENABLED <> 0);
        end;
      end;
    finally
      CloseHandle(Token);
    end;
  end;
end;
Für beliebige Privilegien.

ReDoX 2. Mai 2005 12:45

Re: DebugPrivilege wieder loswerden
 
Hi,
danke manchmal sieht man den Wald vor lauter Bäumen nicht :wall:.

Mfg ReDoX


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz