AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Handle einer DLL rausfinden

Ein Thema von darkdonald · begonnen am 17. Aug 2008 · letzter Beitrag vom 23. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
darkdonald

Registriert seit: 12. Apr 2008
18 Beiträge
 
#1

Handle einer DLL rausfinden

  Alt 17. Aug 2008, 14:07
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Handle einer DLL rausfinden

  Alt 17. Aug 2008, 14:34
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
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Handle einer DLL rausfinden

  Alt 18. Aug 2008, 07:48
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.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Handle einer DLL rausfinden

  Alt 18. Aug 2008, 14:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Handle einer DLL rausfinden

  Alt 18. Aug 2008, 15:47
Zitat von Zacherl:
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.
(Es war ya zu erwarten, das irgend ein kranker Geist mit solch' verrückten Methoden ankommt )
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: Handle einer DLL rausfinden

  Alt 18. Aug 2008, 16:06
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
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Handle einer DLL rausfinden

  Alt 18. Aug 2008, 16:20
(Ahh, schon ok *klappe halt* )
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: Handle einer DLL rausfinden

  Alt 18. Aug 2008, 17:25
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.EXEthen
          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.DLLthen
            begin
              // Modul Handle steht jetzt in
              // Mod32.hModule
              Break;
            end;
          end;
        end;
      finally
        CloseHandle(hSnapshot);
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#9

Re: Handle einer DLL rausfinden

  Alt 18. Aug 2008, 17:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: Handle einer DLL rausfinden

  Alt 18. Aug 2008, 19:08
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 ..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz