F
Hallo an alle,
[...]
so der Fall hat sich geändert. Ich versuch mein Problem nochmal besser zu schildern.
Ich möchte einen Dienst programmieren, der bei Start eine DLL lädt, in der eine CALLBACK-Funktion für einen WindowsHook definiert ist.
Das Problem ist ganz einfach, dass diese DLL geladen sein muss, damit das System darauf zugreifen kann.
Da meine Versuche unmanaged Code in .NET zu verwenden gescheitert sind, habe ich die Funktionen die den Hook installieren bzw. entfernen ebenfalls in eine DLL geschrieben, die ich dann so in meiner WindowsService-Anwendung bekannt gemacht habe:
[DllImport("hook_init.dll", EntryPoint="CreateHookThread", CharSet=CharSet::Ansi)]
extern BOOL CreateHookThread(LPTHREAD_START_ROUTINE);
[DllImport("hook_init.dll", EntryPoint="InstallHook", CharSet=CharSet::Ansi)]
extern BOOL __clrcall InstallHook(void*);
[DllImport("hook_init.dll", EntryPoint="UninstallHook", CharSet=CharSet::Ansi)]
extern BOOL __clrcall UninstallHook(void*);
Wie man dem ungefähr entnehmen kann, werden die Install/Uninstall Funktionen über CreateHookThread (hat seine Berechtigung) aufgerufen.
Das Dumme - aber natürlich logische - ist nur, dass maine Callback-Funktion nicht mehr angesprochen werden kann, nachdem der Thread die DLL "verlassen" hat.
Mein Konzept sah/sieht folgendermaßen aus:
typedef struct _IHookParams
{
HMODULE hDLL;
HHOOK hHook;
FARPROC cbtProcAddr;
} IHookParams;
BOOL CALLBACK InstallHook(void* Params);
BOOL CALLBACK UninstallHook(void* Params);
BOOL CreateHookThread(LPTHREAD_START_ROUTINE lpThreadFunc);
In InstallHook wird mit LoadLibrary die DLL geladen, und in UninstallHook mit FreeLibrary freigegeben. Auf die Werte können beide Funktion über die als static deklarierte Struktur oben zurückgreifen.
Irgendjemand einen Lösungsansatz?