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 Die Start Parameter eines laufenden Prozesses abfragen (https://www.delphipraxis.net/150355-die-start-parameter-eines-laufenden-prozesses-abfragen.html)

Jakson 14. Apr 2010 16:44


Die Start Parameter eines laufenden Prozesses abfragen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi

Wieder einmal eine Spezialfrage:


Ich gehe mit "CreateToolhelp32Snapshot", "Process32First" und "Process32Next" alle laufenden Prozesse durch.

Mit "OpenProcess" bekomme ich das Handle und mit "GetProcessImageFileName" aus der "psapi.dll" den exakten Pfad.

Nur wie komme ich an die Start Parameter ran?

Der ProcessExplorer von Sysinternals kanns ja auch. (Siehe Screenshot)


Danke im voraus

Jakson

Jakson 16. Apr 2010 12:46

Re: Die Start Parameter eines laufenden Prozesses abfragen
 
Habs rausgefunden :lol:

und möchte euch diesen Code nicht vorenthalten.

Delphi-Quellcode:
 type
     TUnicodeString = record
       Length: ShortInt;
       MaxLength: ShortInt;
       Buffer: PWideChar;
     end;
     TProcessBasicInformation = record
       ExitStatus: DWord;
       PEBBaseAddress: Pointer;
       AffinityMask: DWord;
       BasePriority: DWord;
       UniqueProcessID: Word;
       ParentProcessID: DWord;
     end;

 function NtQueryInformationProcess(ProcessHandle:THandle; ProcessInformationClass:DWord; ProcessInformation:Pointer; ProcessInformationLength:DWord; ReturnLength:Pointer): DWORD; stdcall; external 'ntdll.dll' name 'NtQueryInformationProcess';

 function GetProcessParams(ProcHandle:THandle):String;
 var ProcBasInfo       : TProcessBasicInformation;
    PMBAddress        : Pointer;
    RtlUserProcAddress : Pointer;
    RetSize           : DWord;
    CommandLine       : TUnicodeString;
    CommandLineCont   : WideString;
 begin
  Result := '';
  RetSize := NtQueryInformationProcess(ProcHandle, 0, @ProcBasInfo, SizeOf(ProcBasInfo), NIL);
  if RetSize = 0 then
   begin
    PMBAddress := ProcBasInfo.PEBBaseAddress;
    if Assigned(PMBAddress) then
    if ReadProcessMemory(ProcHandle, Pointer(Longint(PMBAddress)        + $10), @RtlUserProcAddress, sizeof(Pointer), RetSize) then
    if ReadProcessMemory(ProcHandle, Pointer(Longint(RtlUserProcAddress) + $40), @CommandLine, sizeof(CommandLine), RetSize) then
     begin
      SetLength(CommandLineCont, CommandLine.length);
      if ReadProcessMemory(ProcHandle, CommandLine.Buffer, @CommandLineCont[1], CommandLine.Length, RetSize) then
       Result := WideCharLenToString(PWideChar(CommandLineCont), CommandLine.Length div 2);
     end;
   end;
 end;
[edit=SirThornberry]Code umformatiert für Zeilenumbruch - Mfg, SirThornberry[/edit]

s.h.a.r.k 16. Apr 2010 12:50

Re: Die Start Parameter eines laufenden Prozesses abfragen
 
Dann würde ich fast sagen, ab damit in die CL :thumb:

Jakson 16. Apr 2010 13:31

Re: Die Start Parameter eines laufenden Prozesses abfragen
 
In der CL ist er anscheinend schon: http://www.delphipraxis.net/internal...=277761#277761

Schaut zwar bisschen anders aus aber macht das selbe


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