Was darf ich in DllMain()?
-
Mein Problem ist folgendes:
Ich bin dabei mir das Hooken von Funktionen anzuschauen und dafür hab ich mir einen Injector aus dem Netz gezogen. Nun hab ich aber den strengen Verdacht, dass der wohl nicht funktioniert, also dachte ich mir, ich schreib eine Dll, in der ich in DllMain() eine MessageBox öffne, da DllMain beim Injecten ja mit DLL_PROCESS_ATTACH ausgeführt werden sollte. Ging aber nicht, weil ich in der DllMain wohl keine blockenden Funktionen aufrufen kann. Als nächstes hab ich versucht in DllMain einen std::ofstream zu einer Datei zu öffnen, ging auch nicht. Nicht das es nicht kompilierte, es passierte nur nichts. Dann dachte ich vielleicht liegt es doch am Injector und habe die Dll mit LoadLibrary von einer GUI Anwendung gestartet. Ging auch nicht. Meine Frage ist nun: Was darf ich in DllMain überhaupt? Oder wie könnt ich von der Dll eine Nachricht an den Benutzer schicken? SendMessage(WM_USER+1...) und dann auffangen ging übrigens auch nicht.PS: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583%28v=vs.85%29.aspx hab ich auch schon durch. Hat mir auch nichts geholfen.
Edit: Habs übrigens auch mit einem Thread probiert (Thread von DllMain gestartet, aber auch da hat keine der 3 Möglichkeiten geklappt)
-
Du darfst so gut wie nicts, wenn Du nicht garantieren kannst, dass die Funktion die Du aufrufst in einer DLL liegt, die nicht schon geladen ist.
Und alles was wartet oder andere Threads startet ist auch verboten
Ansonten steht alles in dem Artikel, den Du sleber zitierst.
-
Da gibts einen Injector der funktioniert + Sourcecode vom Injector sowie von der DLL.
Schau da mal im download Bereich nach ich hab den Injector mal getestet und bei mir funktioniert er (Bei Win7 muss man das Ding als Admin starten).