Auf WSAEVENT reagieren, BEVOR es das fremde Programm tut...
-
Hey!
Ein fremdes Programm benutzt overlapped sockets, und zwar mit WSARecvFrom().
Nun, es wird aber keine CompletionRoutine benutzt, sondern events (Also sobald hEvent der LPOVERLAPPED-Struktur signalisiert ist, ist ein Paket angekommen).Ich möchte dieses Event nun abfangen und den dazugehörigen Datenpuffer manipulieren, bevor die fremde Anwendung darauf zugreift.
Zunächst habe ich eine DLL erstellt, mit dieser WSARecvFrom() der fremden Anwendung gehookt und dann für jeden Aufruf socket und lpOverlapped in einen Vektor gepackt.
Es läuft dabei ein zusätzlicher Thread in der DLL, welcher per WSAGetOverlappedResult() darauf wartet, bis hEvent von lpOverlapped signalisiert wurde, um dann den Buffer zu bearbeiten, BEVOR die gehookte Anwendung darauf zugreift.Tja, nur leider stehe ich vor einigen Problemen.
Es ist dann doch so, dass die fremde Anwendung und meine DLL gleichzeitig auf das Event reagieren. Also meine DLL merkt, dass ein Paket angekommen ist, will den Buffer bearbeiten welcher aber gleichzeitig schon von der gehookten Anwendung verwendet wird?!Dann hab ich mir überlegt, zuerst in der DLL auf das Event zu reagieren, den Buffer zu manipulieren und anschließend das originale lpOverlapped-hEvent zu signalisieren.
Aber wie mache ich das? Einfach nur kopieren funktioniert nicht... (Also *real_lpOverlapped = *lpOverlapped zB...)Außerdem: Ist es einfach so möglich, einen Thread in einer DLL zu erstellen, welche in einen fremden Prozess injiziert wurde? Mit CreateThread() schließt sich der Prozess nach kurzer Zeit, mit _beginthreadex() geht es zwar, aber sobald ich die DLL wieder aus dem Prozess entferne, wird der Prozess ebenfalls beendet...
Bin für jeden Tipp dankbar!
Danke!
MfG