Zitat von
alzaimar:
Mir ist nicht bekannt, das die
DLL in jeden Prozess injiziert werden muss. Es ist aber so, das (nach meinem Halbwissen) Windows es nicht zulässt, das eine EXE einen globalen Hook einrichtet, denn wenn die EXE wegballert, ohne den Hook wegzunehmen, schießt sich dadurch Windows ab.
Die Injektion nimmt Windows vor. Das hat also schon seine Richtigkeit und ist auch was Luckie meint. Was er allerdings übersehen hat, ware die Tatsache, daß die Journal-Hooks auch aus einer EXE heraus global operieren können. Und der Begriff Hardware-Hook war ohnehin für die Katz.
Das mit dem Abschiessen des Systems war bis Windows ME ein Problem. Heute nicht mehr
Zitat von
alzaimar:
Also hat MS sich gedacht: Globale Hooks nur in
DLL. Du schreibst also eine kleine Hook-
DLL, lädst die permanent und initialisierst aus dem
DLL-Code heraus den Hook. Nun sieht Windows, das der Hook aus eine
DLL zeigt und die Welt ist in Ordnung, denn Windows kontrolliert, wann die
DLL wieder aus dem Speicher verschwindet. Über ein Callback realisierst Du die Benachrichtigung, das etwas passiert ist.
Nein, der simple Grund ist, daß nur eine
DLL in mehreren Prozessen gleichzeitig existieren kann. Wenn du das überprüfen möchtest, kannst du gern mal in deiner Hookfunktion den Rückgabewert von GetCurrentProcessId() ausgeben lassen
Zitat von
alzaimar:
Ich denke mal, das meint Luckie et al. mit 'injizieren', oder? Leider finde ich meine
DLL nicht mehr, die das so gemacht hat. Ich weiss nur noch, das man den
DLL-Initialisierungscode (DllMain) selbst schreiben muss, damit das klappt.
SetWindowsHookEx erledigt das für dich. Fensterhooks (worüber wir hier reden) haben nichts, aber auch garnichts mit
API-Hooks zu tun!