![]() |
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 |
Re: System-Privilegien
Seh ich kein Problem. App einfach als Admin starten und das DEBUG-Privileg aktivieren. Dann klappts auch mit OpenProcess.
|
Re: System-Privilegien
Und wie sieht es aus? Lösung gefunden? Hat mein Vorschlag was gebracht?
|
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:
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.").
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
Zuvor setze ich mit
Delphi-Quellcode:
das Privileg SE_DEBUG_NAME = 'SeDebugPrivilege'#0 (was auch zu funktionieren scheint). (Übersetzt von
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; ![]() ------------------------------------------------ Nun, wie setze ich die Debuggingrechte? |
Re: System-Privilegien
Du benutzt eher ReadProcessMemory falsch.
|
Re: System-Privilegien
ok ich hatte es an anderer Stelle verbockt. Nun zu ReadProcessMemory...
|
Re: System-Privilegien
Jawohl.
Taskmanager mit restart-Funktion ist fertig und meine Bibliothek um eine schöne Funktion
Delphi-Quellcode:
reicher.
GetCommandLine(pID:Cardinal):string;
@Themenersteller: vielleicht nutzt ja die Funktion
Delphi-Quellcode:
bei deinem Problem etwas, nur eben die ProcessID mit der entsprechenden ersetzt. Wichtig ist SE_DEBUG_NAME für den entsprechenden Prozess zu setzen.
function EnableTokenPrivilege(pszPrivilege: LPCTSTR): Boolean;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz