Generalnie, gdy tworzyłem część kodu odpowiedzialną za przechwytywanie zdarzeń klawiatury, testowałem to we własnym oddzielnym procesie. Oczywiście wszystko działało. Ale w moich zamierzeniach trojan wciska bibliotekę do jakiegoś procesu. I tak właśnie się dzieje, program działa... prawie dobrze - funkcjonuje wszystko oprócz przechwytywania zdarzeń klawiatury.
Program podpina się, gdy jakiś inny wywoła funkcję select(...), ponieważ ją przekierowałem na własną. I to właśnie z ciała ów funkcji zostaje podpięta biblioteka, która montuje haka za pomocą SetWindowHookEx(...). Procedura obsługi haka, jak i funkcja montująca/usuwająca haka znajdują się w oddzielnym module dll.
Dlaczego, przy takim stanie rzeczy, procedura się nie wykonuje. Dodam, że z wywołania SetWindowHookEx(...) otrzymuję poprawny wynik.

Z góry dzięki za pomoc.