Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi SetThreadContext - Rechte besorgen (Prozess debuggen) (https://www.delphipraxis.net/87611-setthreadcontext-rechte-besorgen-prozess-debuggen.html)

Zacherl 2. Mär 2007 22:54


SetThreadContext - Rechte besorgen (Prozess debuggen)
 
Hi,

ich möchte Set/GetThreadContext für den Thread eines fremden Prozesses aufrufen. Dies schlägt nur leider immer fehl. Wie kann ich mir die erforderlichen Rechte besorgen?

Florian

Luckie 2. Mär 2007 23:23

Re: SetThreadContext - Rechte besorgen (Prozess debuggen)
 
PSDK lesen hilft:
Zitat:

You cannot get a valid context for a running thread. Use the SuspendThread function to suspend the thread before calling GetThreadContext.
If you call GetThreadContext for the current thread, the function returns successfully; however, the context returned is not valid.

Zacherl 3. Mär 2007 10:42

Re: SetThreadContext - Rechte besorgen (Prozess debuggen)
 
Mhh sollte aber gehen, da mein zweites Programm CreateProcess mit CREATE_SUSPENDED verwendet. Also sind doch eigentlich alles Threads suspendiert.

Dann bekomme ich per Windows Message das Handle des Threads, was ich aus ProcessInfo auslese und versuche GetThreadContext aufzurufen. Das schlägt allerdings fehl.

Win32.API 3. Mär 2007 11:01

Re: SetThreadContext - Rechte besorgen (Prozess debuggen)
 
Du solltest vieleicht erstmal die grundlagen lernen und dir dein "project" nicht zusammen kopieren ...

Luckie 3. Mär 2007 11:14

Re: SetThreadContext - Rechte besorgen (Prozess debuggen)
 
Zitat:

Zitat von Florian Bernd
und versuche GetThreadContext aufzurufen. Das schlägt allerdings fehl.

Du hast mittlrweile über tausend Posting. Du sollstest mittleweile wiessen das "geht nicht" oder ähnliche Fehlerbeschreibungen wenig hilfreich sind.

Und ich habe dir oben schon mal gesagt, dass man das PSDK lesen soll:
Zitat:

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

brechi 3. Mär 2007 11:59

Re: SetThreadContext - Rechte besorgen (Prozess debuggen)
 
Win32.API hat recht

CreateProcessA liefert ProcessID // ProcessH // ThreadID // ThreadH
Mit GetThreadContext(ThreadH) sollte es gehen, ansonsten OpenThread mit der ThreadID versuchen.
Btw. machste bei CREATE_SUSPENDED nen System Breakpoint, änder danach also das EIP Register blos nicht ab.

DP-Maintenance 3. Mär 2007 12:02

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Internet / LAN / ASP.NET" nach "Windows API / MS.NET Framework API" verschoben.
Kein Netzwerkproblem

Zacherl 3. Mär 2007 12:08

Re: SetThreadContext - Rechte besorgen (Prozess debuggen)
 
Ist ja gut, ist ja gut .. ich kopiere mir nichts zusammen ..

@Luckie: Das PSDK habe ich gelesen, allerdings hilft mir das auch nicht weiter, wenn der Aufruf komplett fehlschlägt. Ich hätte den Fehler vielleicht etwas genauer beschreiben können, sorry. Das Problem ist, dass der Aufruf von GetThreadContext sofort eine AV auslöst.

@Win32.API: Wie kommst du drauf?

@brechi: Nein, hat er nicht .. Ich weiß, dass CreateProcess diese Werte liefert. Führe ich ein einem Testprojekt CreateProcess aus und nehme hThread für GetThreadContext, dann funktioniert auch alles.
Erstelle ich in einem zweiten Programm allerdings mit CreateProcess einen Prozess und übergebe hThread an mein erstes Programm und rufe darin GetThreadContext auf, dann schlägt dies in einer AV fehl. OpenThread mit der ThreadID habe ich auch probiert. Der Fehler bleibt allerdings gleich ..

brechi 3. Mär 2007 12:13

Re: SetThreadContext - Rechte besorgen (Prozess debuggen)
 
1) Sollte GetThreadContext nie crashen sondern nur failen und dann mit GetLastError der Fehler ausgelesen werden können.
2) Ist es klar dass GetThreadContext nicht mit hThread aus einem anderen Thread funzt. (Grundlagen?)

=> Du machst was mit GetThreadContext falsch, z.b. setzt die größte von TContext nicht oder setzt nicht die Flags von dem was ausgelesen werden soll.

Zacherl 3. Mär 2007 12:18

Re: SetThreadContext - Rechte besorgen (Prozess debuggen)
 
Zitat:

Zitat von brechi
1) Sollte GetThreadContext nie crashen sondern nur failen und dann mit GetLastError der Fehler ausgelesen werden können.
2) Ist es klar dass GetThreadContext nicht mit hThread aus einem anderen Thread funzt. (Grundlagen?)

=> Du machst was mit GetThreadContext falsch, z.b. setzt die größte von TContext nicht oder setzt nicht die Flags von dem was ausgelesen werden soll.

1) Tut es leider aber .. das ContextFlag habe ich gesetzt, allerdings vergessen die Größe vorher festzulegen :wall:
2) Ja, deshalb habe ich dort doch auch den Fehler vermutet. Wenn man debug Rechte für einen Prozess besitzt kann man IMHO auch GetThreadContext mit Thread dieses Prozesses aufrufen.

Vielen Dank für eure Hilfe :thumb:

(Was ich allerdings immer noch komisch finde, ist, dass mein Code funktioniert, wenn ich CreateProcess im selben Programm aufrufe. Ohne vorher die Größe von TContext zu setzen ..)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr.
Seite 1 von 2  1 2      

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