Handle zu main thread bekommen
-
hallo, ich möchte den main thread von Programmen anhalten, indem ich eine Dll injecte und in dieser SuspendThread aufrufe. Wie bekomme ich das Handle zu dem main thread der Anwendung in der ich injecte?
-
Es gibt so etwas wie einen Mainthread nicht! Es gibt höchstens einen ersten Thread. Aber was ein Thread tut ist seine Sache.
Ich habe Implementierungen in denen der "sogenannte" Mainthread nichts anders amacht als x andere Threads zu starten und darauf zu warten das die zurückkommen. Ein Suspend auf diesen Thread würde nichts bringen... denn der Thread wartet sowieso.
Zudem:
http://blog.kalmbachnet.de/?postid=6
http://blog.kalmbachnet.de/?postid=16
-
korrekt wäre primärer thread, steht so in der msdn
-
Es gibt aber auch Prozesse ohnen primären Thread... bzw. der primäre Thread hat sich schon längst wieder beendet...
-
Martin Richter schrieb:
Es gibt so etwas wie einen Mainthread nicht!
Das hast du mir in der Vergangenheit auch schon mal gesagt. Vielleicht benutzen die Leute so gerne dieses Wort, weil das VS es einem vormacht (in der deutschen Version: 'Hauptthread', beim debuggen in der Threads-Listbox).
-
suspenderr schrieb:
hallo, ich möchte den main thread von Programmen anhalten, indem ich eine Dll injecte und in dieser SuspendThread aufrufe. Wie bekomme ich das Handle zu dem main thread der Anwendung in der ich injecte?
für gewöhnlich ist der 'main thread' der, der in einer fensterchen-anwendung die WinMain bzw. die message-loop ausführt. haste das HWND des hauptfensters deiner zielanwendung dann (entgegen allen spitzfindigkeiten und haarspaltereien hier): http://msdn.microsoft.com/en-us/library/ms633522(VS.85).aspx

-
danke +fricky

-
aber wenn man es eh nicht benutzen darf, dann geht das nicht.
Ich erkläre mal mein Problem. Ich injecte eine DLL und in der sind ein paar calls zu addressen aus dem originalen Programm. Aber wenn mein Call und der ständige call aus dem normalen programm sich überschneiden crashed es. Also muss ich während meine dll ausgeführt wird denn rest pausieren.
-
So ganz verstehe ich das Problem nicht. Überschneidungen lassen sich vielfältig vermeiden: Separate threads, Semaphoren, Mutex, ...
Wenn Du in der DLL das HWND des primären threads haben willst, dann übergebe HWND als Parameter einer aufzurufenden DLL-Funktion, z.B. DllInit(HWND hwndMain).
-
vielleicht hilft das: http://www.codeguru.com/forum/archive/index.php/t-241224.html

-
also ich kann den Prozess auch erstellen, und das habe ich mit CreateProcess und dem Suspendet Flag gemacht, jedoch muss es erst anhalten, wenn es entpackt ist, weil die .exe gepackt ist. Mit suspendet haltet das Programme am entry point vom packer und nicht wenn es entpackt ist.