![]() |
Übergabe eines Wertes an eine DLL-Variable eines anderen Prozesses
Sehr geehrte DPLer,
zunächst, ja, ich habe die Suche gewissenhaft genutzt und habe nichts gefunden oder bin einfach zu inkompetent! In meinem Projekt hooke ich per DLL-Injektion über CreateRemoteThread und LoadLibrary die wichtigen API-Calls der WS2_32.dll und fixiere sie auf einen Netzwerkadapter. Bisher leider mit einer, in der DLL deklarierten, statischen IP. (Projektvorlagen zum Selbststudium = ForceBindIP) Es besteht die Möglichkeit über eine Combobox den gewünschten Adapter auszuwählen. Jetzt kommt der Haken. Leider fällt mir nach längerer Überlegung kein vernünftiger Weg ein, der injizierten DLL die zu wählende, den zu verwendenden Netzwerkadapter mitzuteilen. :wall: Meine Überlegungen waren mir zu unflexibel:
Freue mich schon auf Eure Ideen und Vorschläge. Beste Grüße Karyn P.S.: Anwendungszweck ist das LAN-Gaming über's Internet! |
AW: Übergabe eines Wertes an eine DLL-Variable eines anderen Prozesses
Stichwort: IPC (inter-process communication / Interprozesskommunikation)
Da gibt es viele Wege, wie z.B. MMF (memory-mapped file) Pipe Message (SendMessage, PostMessage) nomale Dateien ... |
AW: Übergabe eines Wertes an eine DLL-Variable eines anderen Prozesses
Wie Himitsu bereits gesagt hat, gibt es dazu mehrere Möglichkeiten.
Die "schlankeste" ist meiner Meinung nach über eine MMF, und dazu gab es auch schon ein "How To" ![]() aber... Zitat:
Wenn du im Endeffekt mehrere / viele unterschiedliche Messages von einem Server an einen Client (und vice versa) senden wollen würdest, dann wäre eine "echte" Client-/Server-Anwendung wohl eher angebracht. |
AW: Übergabe eines Wertes an eine DLL-Variable eines anderen Prozesses
Zitat:
|
AW: Übergabe eines Wertes an eine DLL-Variable eines anderen Prozesses
Zitat:
Code:
Nochmals vielen Dank :thumb:
T_OWN_INADDR = record
S_un_b: SunB; S_un_w: SunW; S_addr: Integer; end; // Prozedur in der Bedienanwendung procedure MakeMMF(own_inaddr: T_OWN_INADDR); var hMap: Cardinal; MapView: Pointer; tmp_inaddr: T_OWN_INADDR; inaddr: in_addr; begin hMap := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(T_OWN_INADDR), 'ipu7'); MapView := MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); if Assigned(MapView) then begin OutputDebugString('MMF erfolgreich erstellt!'); CopyMemory(MapView, @own_inaddr, SizeOf(T_OWN_INADDR)); end; CloseHandle(hMap); end; // Prozedur in der DLL die eingenistet wird. procedure ReadMMF; var hMap: Cardinal; MapView: Pointer; tmp_inaddr: T_OWN_INADDR; inaddr: in_addr; begin hMap := OpenFileMapping(FILE_MAP_READ, False, 'ipu7'); MapView := MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0); if Assigned(MapView) then begin OutputDebugString('MMF erfolgreich geöffnet!'); CopyMemory(@tmp_inaddr, MapView, SizeOf(T_OWN_INADDR)); AdapterAddress.S_un_b := tmp_inaddr.S_un_b; AdapterAddress.S_un_w := tmp_inaddr.S_un_w; AdapterAddress.S_addr := tmp_inaddr.S_addr; UnMapViewOfFile(MapView); CloseHandle(hMap); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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