Via ReadProcessMemory Pfad und Parameter eines Prozesses bekommen



  • Das hört sich gut an:

    GetProcessImageFileName
    Retrieves the name of the executable file for the specified process.

    Danke, aber wie macht man das mit den Parametern?


  • Mod

    Man gibt sie an und bekommt ein Ergebnis... 🤡

    Welche Parameter bei welcher Funktion bereiten Dir Schwierigkeiten?



  • Ne, ich meine, die Parameter eines Prozesses auslesen ^^


  • Mod

    Hmmm... Ich vermute, dazu musst Du eine DLL in den anderen Prozess injezieren um GetCommandLine auszuführen.

    Was anderes fällt mir dazu jetzt nicht ein.

    Wofür benötigst Du die Infos?



  • Nicht immer gleich mit Kanonen auf Spatzen schiessen...

    Das "einfachste" ist WMI mit Win32_Process
    Da kommt z.B. sowas raus:

    Caption: WINWORD.EXE
    [b]CommandLine: "C:\Programme\Microsoft Office\OFFICE11\WINWORD.EXE" -Embedding[/b]
    CreationClassName: Win32_Process
    CreationDate: 20070717112000.390625+120
    CSCreationClassName: Win32_ComputerSystem
    CSName: PIV3200
    Description: WINWORD.EXE
    ExecutablePath: C:\Programme\Microsoft Office\OFFICE11\WINWORD.EXE
    Handle: 3644
    HandleCount: 410
    KernelModeTime: 57812500
    MaximumWorkingSetSize: 1413120
    MinimumWorkingSetSize: 204800
    Name: WINWORD.EXE
    OSCreationClassName: Win32_OperatingSystem
    OSName: Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1
    OtherOperationCount: 8374
    OtherTransferCount: 333916
    PageFaults: 36330
    PageFileUsage: 32206848
    ParentProcessId: 2176
    PeakPageFileUsage: 40337408
    PeakVirtualSize: 278630400
    PeakWorkingSetSize: 65769472
    Priority: 8
    PrivatePageCount: 32206848
    ProcessId: 3644
    QuotaNonPagedPoolUsage: 15760
    QuotaPagedPoolUsage: 149716
    QuotaPeakNonPagedPoolUsage: 18560
    QuotaPeakPagedPoolUsage: 202636
    ReadOperationCount: 1503
    ReadTransferCount: 5872832
    SessionId: 2
    ThreadCount: 8
    UserModeTime: 91718750
    VirtualSize: 199839744
    WindowsVersion: 5.1.2600
    WorkingSetSize: 58900480
    WriteOperationCount: 11368
    WriteTransferCount: 7569554
    

  • Mod

    Na sie mal an. Danke! Ich vergesse WMI zu oft.
    Wäre jetzt die interessante Frage wie WMI es macht... 🙂



  • WMI läuft ja im Kernel und kann alles 😉



  • Was ist "WMI"? 😮
    Und wie kann ich damit etwas machen? ._.



  • Die Frage ist ja erstmal ob du das mit deinem eigenen oder einem anderen Prozess machen willst? Wenns dein eigener sein soll und du unbedingt das mit ReadProcessMemory machen willst, kannst du deinen Process Environment Block auslesen. Falls es ein anderer Prozess sein soll, musst du zuerst deinen Code irgendwie im anderen Prozess zum laufen bekommen und dann das gleiche machen.

    Aber warum willst du es denn unbedingt so umständlich machen, wenn es dafür sowieso fertige Funktionen für gibt?


  • Mod



  • Hallo

    Hab extra diesen Thread rausgekramt, wollte keinen neuen erstellen.
    Habe ähnliches Problem, habe eine PID dessen handle ich per OpenProcess() bekomme.
    Nur wie komme ich an die executable bzw. nur der Name (ich will nichts manipulieren etc.).

    Ich habe es mit GetProcessImageFileName versucht - aber bekomme nur zerstückeltes bzw. gar kein richtigen Namen im Pointer.
    Habe OpenProcess mit 0x1000 besetzt, allerdings scheint das bei XP ja nicht zureichen denn man muss 0x0400 Rechte haben?
    Dann stürzt das Programm aber ab (sind ja irgendwelche PIDs und nichts was ich unter dem user etc. ausgeführt hätte).
    Wie mache ich das denn am einfachsten, hier wurde ja von WMI gesprochen ist das auch die Lösung für mich?

    Gibt es keinen einfachen Weg nur den Namen der Executable zu bekommen, sollte unter XP und Vista funktionieren.



  • GetProcessImageFileName, QueryFullProcessImageName



  • @ascda

    Naja dein Post beantwortet in keinsterweise meine Frage.



  • sicher tut er das. wenn du irgendwelche "zerstückelten" strings bekommst, machst du wohl was falsch. schonmal was von GetLastError gehört und MSDN mal durchlesen wäre auch ned schlecht, ich wette nämlich es liegt an OpenProcess 🙄 ➡ ➡ 👎



  • sicher tut er das. wenn du irgendwelche "zerstückelten" strings bekommst, machst du wohl was falsch. schonmal was von GetLastError gehört und MSDN mal durchlesen wäre auch ned schlecht, ich wette nämlich es liegt an OpenProcess 🙄

    Ja schon klar, aber das war doch meine Frage - der Rückgabewert ist 0 ich weiß das es an OpenProcess liegt 😉
    Aber die Frage für mich ist, wie geht es nun?

    Auf XP exitiert dieses Recht nicht "PROCESS_QUERY_LIMITED_INFORMATION (0x1000)" - man soll "PROCESS_QUERY_INFORMATION (0x0400)" nutzen.
    Das Problem ist es ist kein Prozess den ich erstellt habe, sondern irgendeiner ich kann das Recht also nicht bekommen - wie komme ich also an den Prozessnamen?
    Das ist meine Frage die ganze Zeit 🙄



  • Hallo,

    Therion schrieb:

    Das Problem ist es ist kein Prozess den ich erstellt habe, sondern irgendeiner ich kann das Recht also nicht bekommen - wie komme ich also an den Prozessnamen?
    Das ist meine Frage die ganze Zeit 🙄

    Vielleicht übersehen?:

    MSDN-Doku schrieb:

    Remarks
    To open a handle to another another process and obtain full access rights, you must enable the SeDebugPrivilege privilege. For more information, see Changing Privileges in a Token.

    Alternative:

    CreateToolhelp32Snapshot, Liste durchgehen, und PROCESSENTRY32-Struktur auswerten.

    MfG,

    Probe-Nutzer


Anmelden zum Antworten