Forum: Win32/Win64 API (native code)
Delphi
by negaH,
17. Nov 2003
Statt mit RegisterWindowMessage() zu arbeiten, kann man auch wm_CopyData benutzen. Das hat einen entscheidenden Vorteil, nämlich das Windows darauf achtet das die Speicherdaten in wm_CopyData von einem Prozess zum anderen zugreifbar sind. Der Nachteil dabei ist es WIE wir sicherstellen können das unser Hook erkennen kann das eine wm_CopyData Botschaft für uns ist, und andere wm_CopyData Handler...
Forum: Win32/Win64 API (native code)
Delphi
by negaH,
17. Nov 2003
Tja, das entfernen eines Subclassing ist nicht so einfach wie man denkt.
Zb. du hast mit obiger Methode ge-subclassed, und in gwl_WndProc steht unsere Windowproc drinnen. Nun Subclassed ein anderes Modul ebenfalls, dann gibt es keine Möglichkeit die eigene Subclass wieder zu entfernen. Denn dein Modul + das andere Modul + Windows selber kennen kein gemeinsammes Protokoll das es ermöglicht...
Forum: Win32/Win64 API (native code)
Delphi
by negaH,
14. Nov 2003
Keine Garantien meinerseits, bei mir funktionierts prächtig.
Gruß Hagen
type
PHookData = ^THookData;
THookData = packed record
WndProc: array of Byte;
ThreadProc: array of Byte;
Forum: Win32/Win64 API (native code)
Delphi
by negaH,
13. Nov 2003
Übrigens, schau mal auf die Uhrzeit der Postings ! das sagt alles.
Gruß Hagen
Forum: Win32/Win64 API (native code)
Delphi
by negaH,
13. Nov 2003
Ich hatte mit Luckie schon das Vergnügen über Richter zu diskutieren. Und ich habe von ihm gehört, kenne aber keines seiner Bücher. Warum auch ? Die Ideen und angedeuteten Umsetzungen findest du überall im WEB. Auch ich werde hier NUR andeuten und nur die richtige Richtung wie es funktionieren wird, aufzeigen. Warum ? Man muß sich selber reinpfriemeln und kann eigentlich NUR dadurch auch alles...
Forum: Win32/Win64 API (native code)
Delphi
by negaH,
11. Nov 2003
Nein, auf gar keinen Fall. Er hat zwar diese Aufrufparamter aber du solltest sie NICHT deklarieren. Es ist dann nämlich durchaus möglich das der Compiler einen Stackframe, auch für den Assemblercode, anlegt. Da wir im Assemblerpart direkt den Stack manipulieren würde dies zu Abstürtzen führen. Also: WindowProcDispatcher so lassen wie er ist.
Ist richtig, da unser WindowProcDispatcher() ja...
Forum: Win32/Win64 API (native code)
Delphi
by negaH,
11. Nov 2003
Es gäbe aber einen sicheren Weg wenn man PHookData "umcodiert".
type
PHookData = ^THookData;
THookData = packed record
WindowProc: array of Byte;
SaveWindowProc: Pointer;
hWnd: HWnd;
GetWindowLong: function(hWnd : HWND; nIndex : INTEGER ): LongInt; stdcall;
Forum: Win32/Win64 API (native code)
Delphi
by negaH,
10. Nov 2003
Übrigens, diese Technik kann in jeden beliebigen Prozess Code injezieren. D.h. das MMF kann auch dem Ziel-Prozess zugeordnet werden, oder besser noch einfach nur global für alle Prozesse gültig sein.
Nimmt man nun die Remote Thread funktionen und setzt deren Thread funktion auf eine so wie oben erzeugt "Funktion" dann könnte diese Funktion das Fenster subclassen IM Zielprozess. Somit wäre es...
Forum: Win32/Win64 API (native code)
Delphi
by negaH,
9. Nov 2003
Es müsste auch über shared Speicher funktionieren. Man alloziert also einen Speicherbereich oberhalb $80000000, also mit CreateFileMapping(). Dann kopiert man seinen Fensterprocedure code da rein. Und arbeitet mit SetWindowLong(). Ob nun NT abbrüft ob SetWindowLong() die entsprechenden Privilegien benötigt weis ich aber nicht.
Gruß Hagen