Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DLl-Injection HWND der Hostapplikation herausfinden (https://www.delphipraxis.net/157766-dll-injection-hwnd-der-hostapplikation-herausfinden.html)

Memnarch 24. Jan 2011 14:16

DLl-Injection HWND der Hostapplikation herausfinden
 
Tag,
ich experimentiere gerade mit DLL-Injections rum.
Klappt auch soweit.
Nur habe ich ein problem: Ich möchte innerhalb meiner DLL das HWND der hostapplikation, in das es injeziert wurde, herausbekommen, und das Klappt überhaupt nicht.

Ich schaffe es die PID, den Pfad zur applikation und den ExeNamen herauszubekommen.

Das gogolen und auch die sufu hier erbrachten nichts nützliches(zum testen soll mit hilfe des HWND einfach besagte applikation kurz per hide verschwinden und dann wieder erscheinen, und das funzt nicht)

Bin auch schon per enumWindows durch die fenster und habe die PIDs verglichen. Alles kein erfolg.
Super wäre natürlich sowas wie GetHwndfromPID, aber sowas scheints nicht zu geben >.<

EDIT: als testgebiet dient Wordpad (bin unter WinXp). Aber grundsätzlich soll es applikationsunabängig laufen.

MFG
Memnarch

Assarbad 24. Jan 2011 14:17

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
Alle Fenster auflisten und dem Prozess zuordnen ginge schon. Aber was genau möchtest du denn erreichen? Es gibt schließlich Prozesse ganz ohne Fenster ;)

mleyen 24. Jan 2011 14:31

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
Delphi-Quellcode:
function getProcessWinHandle(const PID: Integer): THandle;

  function MyEnumWindowProc(AHandle: THandle; EWD: PEnumWinData): boolean; stdcall;
  var
    ProcessID: THandle;
  begin
    ProcessID := 0;
    GetWindowThreadProcessID(AHandle, ProcessID);

    if (ProcessID = EWD.ProcessID) and IsWindow(AHAndle) then
    begin
      result := true;
      if EWD.WinHandle = 0 then
        EWD.WinHandle := AHandle;
    end
    else
      result := true;
  end;

var
  EWD : pENumWinData;
begin
   new(EWD);
   EWD.WinHandle := 0;
   EWD.ProcessID := PID;

   EnumWindows(@MyEnumWindowProc, Integer(EWD));
   Result := EWD.WinHandle;
   dispose(EWD);
end;
:?:

DeddyH 24. Jan 2011 14:35

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
Zitat:

Delphi-Quellcode:
if (ProcessID = EWD.ProcessID) and IsWindow(AHAndle) then
    begin
      result := true;

Müsste das nicht false heißen?

Memnarch 24. Jan 2011 14:42

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
@Assarbard: Ich ziele imo nur auf Prozesse mit Fenster ab(wie wordpad).

@Mleyen: da sist aber mal ne abenteuerliche konstruktion mit ner funktion inner funktion o.O. Ich gucks mir mal an.

MFG
Memnarch

Assarbad 24. Jan 2011 14:50

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
Zitat:

Zitat von Memnarch (Beitrag 1076896)
@Mleyen: da sist aber mal ne abenteuerliche konstruktion mit ner funktion inner funktion o.O. Ich gucks mir mal an.

Standard in Pascal. Keine Angst, daran ist nichts abenteuerlich. Im Gegenteil, es ist guter Programmierstil, da so die Callbackfunktion nicht außerhalb dieser (äußeren) Funktion sichtbar ist (es sei denn durch Aliasing).

Memnarch 24. Jan 2011 14:56

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
Warum wird oben eigentlich nach THandle gefragt? Sind die prozessIds nicht eigentlich Cardinals?

MFG
Memnarch

Assarbad 24. Jan 2011 15:00

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
Zitat:

Zitat von Memnarch (Beitrag 1076904)
Warum wird oben eigentlich nach THandle gefragt? Sind die prozessIds nicht eigentlich Cardinals?

Sind sie. Bzw. vorzeichenlose Ganzzahlen (LongWord).

Ist etwas, was vermutlich behoben werden sollte. Aber in Delphi sind (ohne 64bit-Compiler) THandle und Cardinal wohl noch identisch. Ein Handle hat normalerweise in C die Breite eines Pointers ;)

Memnarch 24. Jan 2011 15:04

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
Ah gut :)

Also es klappt einfach immernoch nicht o.O.

Die PID die meine DLL rausgibt, stimmt mit der überein, in die ich injeziert habe, allerdings findet der wohl kein HWND zu wordpad.....

Assarbad 24. Jan 2011 15:06

AW: DLl-Injection HWND der Hostapplikation herausfinden
 
Haste DeddyH's "Patch" auch drin?

Apropos: was steht denn in EWD.WinHandle?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Seite 1 von 2  1 2      

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