![]() |
Handle einer DLL rausfinden
Hallo!
Ich habe folgendes Problem: Ich habe ein Plugin für QIP (so ähnlich wie ICQ) geschrieben, dass per SharedMem neue Messages an ein kleines Tool von mir schickt. Die Message wird dann auf einem LCD Display angezeigt. Funktioniert auch wunderbar. Nun möchte ich umgekehrt auf dem Display eine Antwort auswählen und diese per SharedMem zurück an das Plugin senden. Das Plugin ist eine DLL. Leider kriege ich es nicht hin, weil ich irgendwie nicht dass Plugin-Handle finde. Wie muss ich vorgehen? Bekannt sind der Exe-Name der Hauptanwendung (QIP), der DLL-Name, der Klassenname des Plugins. Ich habe schon alles mögliche versucht, aber das Plugin reagiert nicht. Ich denke weil das Handle falsch ist... Oder gibt eine Möglichkeit im Plugin das eigene Handle rauszufinden? Dann könnte ich das mit der ersten Message an mein Tool verschicken?!? Ratlos... Gruss Donald |
Re: Handle einer DLL rausfinden
Hallo Donald,
ich habe nicht auf Anhieb feststellen können, wie ein Plugin für QIP aussieht, aber wenn es eine DLL sein sollte, dann erhält diese ihr Handle beim Aufruf der Initialisierungsfunktion DllMain(). Freundliche Grüße |
Re: Handle einer DLL rausfinden
Verstehe ich das richtig? Die DLL wird von QIP geladen, und du möchstest jetzt das Handle, was QIP beim laden dieser DLL bekommen hat, in einem anderen Prozess herausfinden? Wenn das stimmt, dann wird das nicht klappen. :shock:
|
Re: Handle einer DLL rausfinden
Natürlich geht das :) Du musst allerdings mittels WriteProcessMemory und CreateRemoteThread bisschen rumtricksen, sodass du GetModuleHandle mit dem DLL Namen als Parameter injizierst und z.b. den Rückgabewert des Thread dann auf das Module Handle setzt.
|
Re: Handle einer DLL rausfinden
Zitat:
|
Re: Handle einer DLL rausfinden
:mrgreen: Ist allerdings nicht viel komplizierter als DLL Injection. Aber halt, es geht noch einfacher. In der Unit TlHelp32 gibt es eine API, mit der man z.b. alle Prozesse auflisten kann. Genauso aber kann man damit z.b. alle geladenen Module eines bestimmten Prozesses auflisten lassen (CreateToolhelpSnapshot heißt die API).
Gruß Zacherl |
Re: Handle einer DLL rausfinden
(Ahh, schon ok *klappe halt* :mrgreen:)
|
Re: Handle einer DLL rausfinden
Auf die Schnelle:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var hSnapshot, PID: Cardinal; Proc32: TProcessEntry32; Mod32: TModuleEntry32; begin PID := 0; hSnapshot := TlHelp32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot <> 0) and (hSnapshot <> INVALID_HANDLE_VALUE) then begin try if Process32First(hSnapshot, Proc32) then begin while Process32Next(hSnapshot, Proc32) do begin if AnsiUppercase(Proc32.szExeFile) = 'QIP.EXE' then begin PID := Proc32.th32ProcessID; Break; end; end; end; finally CloseHandle(hSnapshot); end; end; if PID <> 0 then begin hSnapshot := TlHelp32.CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID); if (hSnapshot <> 0) and (hSnapshot <> INVALID_HANDLE_VALUE) then begin try if Module32First(hSnapshot, Mod32) then begin while Module32Next(hSnapshot, Mod32) do begin if AnsiUppercase(Mod32.szModule) = 'PLUGIN.DLL' then begin // Modul Handle steht jetzt in // Mod32.hModule Break; end; end; end; finally CloseHandle(hSnapshot); end; end; end; end; |
Re: Handle einer DLL rausfinden
Moment!
ShareMem = MemoryMappedFiles? Senden = SendMessage? Dann brauchst du das Fensterhandle von QIP und die Dll muss einen Messagehook installieren. Wenn du wirklich das Handle der Dll brauchst: Ruf innerhalb von der Dll GetModuleHandle('dllname') auf, bzw. VirtualQuery oder einfach dllhandle := hinstance (wenn ich micht net irre) und teil es deinem Programm über SharedMem mit. Auch wenn man fast alles mittels Injecten machen kann ist das hier doch irgendwie sinnlos. Genauso wie das Handle extern bekommen was will man damit wenns eh nur im eigenen Prozess gültig ist. |
Re: Handle einer DLL rausfinden
Er braucht das Handle ja für einen zweiten Prozess, der mit dem Plugin kommmuniziert. Wozu das Handle hier konkret benötigt wird weiß ich allerdings auch nicht ..
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 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 by Thomas Breitkreuz