Prozess ID mittels Handle ermitteln



  • Hi,

    ich hab den Handle zu einem Prozess und müsste damit die ID des Przesses ermitteln. Wie funktioniert sowas (falls es überhaupt funktioniert)?



  • hm, mir fällt im moment nur ein wie man an den processhandle durch die ProcessID kommt (OpenProcess, dadurch bekommt man erst ein Handle zum Process).
    Sicher dass es Processhandle ist und nicht window-handle? Falls es ein Windowhandle ist:
    GetWindowThreadProcessId

    The GetWindowThreadProcessId function retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window
    

    ansosnten kenne ich noch eine sichere Methode die sowohl unter win 9.x wie unter NT läuft:

    HANDLE WINAPI CreateToolhelp32Snapshot(
    DWORD dwFlags,
    DWORD th32ProcessID
    );
    also:
    CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
    und dann:
    Process32First
    Process32Next



  • hm...also OpenProcess nützt mit nichts, weil es einen Handle erstellt mit einer ID, aber eben nicht anders herum....
    und CreateToolhelp32Snapshot listet alle Prozesse auf, aber wie kann ich nun meinen speziellen Prozess, vom dem ich den Handle habe, da heraus fischen?



  • Okay, ich hab eben gesehen, dass der letzte der aufgelisteten Prozesse der zuletzt geöffnete ist, damit kann ich was anfangen. danke ^^





  • Mit ZwQueryInformationProcess bzw. NtQueryInformationProcess auser der NTDLL kann man mittels ProcessBasicInformation einige Informationen eines Prozess-Handles abfragen (u.a. auch dessen ID)



  • hm, also an GetProcessId hab ich auch gedacht, gibts auch in der PSDK, auf irgendwie nicht auf meinem Rechner...

    ZwQueryInformationProcess hab ich auch nicht gefunden und NtQueryInformationProcess ist so wie ich das sehe leider nur ab Win2000 verfügbar, das Programm sollte allerdings auf allen Win-Systemen laufen...



  • Dann ist GetProcessId erst recht nix für Dich:

    MSDN schrieb:

    Requirements
    Client: Requires Windows XP SP1.
    Server: Requires Windows Server 2003.
    Header: Declared in Winbase.h; include Windows.h.
    Library: Link to Kernel32.lib.
    DLL: Requires Kernel32.dll.



  • Ich hab keine NT4 um das zu überprüfen. Aber nach meinen Information ist NtQueryInformationProcess auch in NT4 enthalten.



  • ist ja auch egal, das ganze sollte jedenfalls auch unter windows 98 laufen, und meine aktuelle lösung funktioniert auch.


Log in to reply