![]() |
Kommunikation zwischen (injected) DLL und Programm
Hallo erstmal ^^
Also folgende Situation: Ich habe eine DLL in einen Prozess geladen, diese soll aber jetzt meinem Hauptprogramm "Bericht erstatten". Das ganze über Registry zu realisieren ist zu umständlich, gibt es keine andere Methode? Achja nach Möglichkeit müsst ich auch der DLL Anweisungen geben können. Gruß DarkPressure |
Re: Kommunikation zwischen (injected) DLL und Programm
Möglichkeiten wären über Sockets (evtl. Stören aber Firewalls) oder Windows-Messages.
|
Re: Kommunikation zwischen (injected) DLL und Programm
Zitat:
|
Re: Kommunikation zwischen (injected) DLL und Programm
Schau dir mal die Threads zu
![]() |
Re: Kommunikation zwischen (injected) DLL und Programm
So weit, so gut :wink:
Trotzdem gibts ein weiteres Problem, in meiner DLL sagt er mir Handle ist ein undeclared identifier, obwohl ich Controls als Unit hinzugefügt hab.
Delphi-Quellcode:
EDIT: Mittlerweile weiß ich, dass dieses Hanlde sich nur auf die Controls eienr Form bezieht..
...
hTargetWnd := FindWindowEx(0, 0, nil, PChar('Fenster')); if hTargetWnd <> 0 then SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData)) else ShowMessage('No Recipient found!') ... Aber wie löst man das in der DLL? |
Re: Kommunikation zwischen (injected) DLL und Programm
|
Re: Kommunikation zwischen (injected) DLL und Programm
Ich krieg die Krise mit den Pipes :wall:
Im Client steht jetzt
Delphi-Quellcode:
Und wirds in der DLL initialisiert: (Beispiel)
procedure TForm1.NPipeServer1IncomingData(Sender: TObject; Data: TMemoryStream;
var Reply: TMemoryStream); begin Memo1.Lines.LoadfromStream(Data); end;
Delphi-Quellcode:
begin
PipeClient := TNPipeClient.Create(Nil); PipeClient.PipeName := 'MyPipe'; PipeClient.SendTimeout := 500; WMSend('Recv', 999); end;
Delphi-Quellcode:
Ich bin wirklich am verzweifeln :gruebel:
procedure WMSend(Action: string; Socket: Integer); stdcall;
var MS : TMemoryStream; Senddata: string; begin MS:=TMemoryStream.Create; Senddata := Action + IntToSTR(Socket); MS.WriteBuffer(Pointer(Senddata)^, Length(Senddata)); PipeClient.SendBuffer(MS); MS.Free; end; |
Re: Kommunikation zwischen (injected) DLL und Programm
Sory für doppel Antwort, abe rich möchte sagen, dass ich auf Pipe lieber verzichte.
Ich würde gern die Windows Message Methode nutzen,
Delphi-Quellcode:
Kann mir da jemand sagen wie ich da smit dem Handl löse in einer DLL
...
hTargetWnd := FindWindowEx(0, 0, nil, PChar('Fenster')); if hTargetWnd <> 0 then SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData)) else ShowMessage('No Recipient found!') ... Hoffe jemand kann mir weiter helfen :balloon: |
Re: Kommunikation zwischen (injected) DLL und Programm
Hallo,
also Dein Hauptprogramm könnte eine Broadcast Message senden, auf die Deine Dll mit dem Handle der eigenen Fensterprozedur antwortet. Von diesem Zeitpunkt kennt das Hauptprogramm und die Dll die entsprechenden Handles. Für Broadcast Message: DBT_INIT: cardinal; DBT_INIT := RegisterWindowMessage(MSG_DBT_INIT); PostMessage(HWND_BROADCAST,DBT_INIT,self.handle,0) ; Für Fensterprozedur Dll procedure WndProc(var Message: TMessage); begin if Message.Msg = DBT_INIT then begin PostMessage(Message.LParam,DBT_INIT,dllWndHdl,0); // das ist trocken getippt, könnte auch WParam sein end end dllWndHdl := AllocateHWnd(WndProc); Gruesse, Guido |
Re: Kommunikation zwischen (injected) DLL und Programm
Mit was injezierst du denn die DLL?
Wenn du es mit madCodeHook machst, werden dir die IPC-Funktionen gleich mitgeliefert, wenn du's nicht mit madCodeHook machst, kann ich dir nur dazu raten :D . Wie auch immer, effektive Methoden können WindowMessages sein, Pipes, shared memory, oder geschicktes Arbeiten mit Mutexes/Semaphoren/Critical Sections und ReadProcessMemory bzw. WriteProcessMemory, kommt eben immer auf den Anwendungszweck/bereich an. ciao, Philipp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr. |
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