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 System-Privilegien (https://www.delphipraxis.net/113437-system-privilegien.html)

WinAPI 7. Mai 2008 20:51


System-Privilegien
 
Hallo,
ich habe ein kleines Tool entwickelt was Werte aus dem Speicher eines laufenden Prozesses ausliest.
Allerdings hat dieses Tool eigentlich keine Rechte auf diesen Prozess zuzugreifen ...
Ich musste jedesmal die Rechte manuell mit einem Tool aus dem internet verteilen (PermEdit)
Wie kann ich das in Delphi selberschreiben ? :)
Hat da jemand eine Idee ? :)

MfG Ich

Dezipaitor 7. Mai 2008 23:23

Re: System-Privilegien
 
Seh ich kein Problem. App einfach als Admin starten und das DEBUG-Privileg aktivieren. Dann klappts auch mit OpenProcess.

Dezipaitor 21. Jun 2008 15:20

Re: System-Privilegien
 
Und wie sieht es aus? Lösung gefunden? Hat mein Vorschlag was gebracht?

hboy 27. Jul 2008 21:07

Re: System-Privilegien
 
Hallo,

ich klemme gerade an der Stelle, dass nun so wirklich garnichts geht außerhalb des Prozesses (XP SP2, als Admin).

Ich rufe OpenProcess folgendermaßen auf:
Delphi-Quellcode:
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
dabei bekomme ich, wenn ich mit PID := GetCurrentProcessID arbeite, bei ReadProcessMemory nur einen Berg Gerümpel und sobald ich einen Fremdprozess aufrufe ist GetLastError = 87 (ungültige Parameterkombination "The parameter is incorrect.").

Zuvor setze ich mit
Delphi-Quellcode:
function EnableTokenPrivilege(pszPrivilege: LPCTSTR): Boolean;
var
  hToken : THandle;
  tkp :_TOKEN_PRIVILEGES;
  ReturnLength: Cardinal;

begin
   hToken := 0;
   tkp.PrivilegeCount := 0;
   result := false;

    // Get a token for this process.
    if not _OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, @hToken)
      then begin writeln('Cannot open current process token.'); exit; end;

    // Get the LUID for the privilege.
    if(LookupPrivilegeValue(LP_SYSTEM_NAME_LOCAL, pszPrivilege,tkp.Privileges[0].Luid)) then
    begin
        tkp.PrivilegeCount := 1; // one privilege to set
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

        // Set the privilege for this process
        _AdjustTokenPrivileges(hToken,false, @tkp,
            sizeof(TOKEN_PRIVILEGES),PTOKEN_PRIVILEGES(nil), @ReturnLength);
        if (GetLastError() <> ERROR_SUCCESS) then begin writeln('Adjusting token privileges failed.'); exit; end;
    end;

  result := true;
end;
das Privileg SE_DEBUG_NAME = 'SeDebugPrivilege'#0 (was auch zu funktionieren scheint). (Übersetzt von hier)

------------------------------------------------

Nun, wie setze ich die Debuggingrechte?

Dezipaitor 27. Jul 2008 21:26

Re: System-Privilegien
 
Du benutzt eher ReadProcessMemory falsch.

hboy 27. Jul 2008 21:31

Re: System-Privilegien
 
ok ich hatte es an anderer Stelle verbockt. Nun zu ReadProcessMemory...

hboy 28. Jul 2008 06:59

Re: System-Privilegien
 
Jawohl.
Taskmanager mit restart-Funktion ist fertig und meine Bibliothek um eine schöne Funktion
Delphi-Quellcode:
GetCommandLine(pID:Cardinal):string;
reicher.

@Themenersteller: vielleicht nutzt ja die Funktion
Delphi-Quellcode:
function EnableTokenPrivilege(pszPrivilege: LPCTSTR): Boolean;
bei deinem Problem etwas, nur eben die ProcessID mit der entsprechenden ersetzt. Wichtig ist SE_DEBUG_NAME für den entsprechenden Prozess zu setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 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