Ну, если бы меня разозлили, я б написал библиотеку, перехватывающую вызов SetWindowsHookEx. Буквально пара строчек:
1) получить адрес функции SetWindowsHookEx()
2) открыть доступ на запись к этому участку памяти через VirtualProtect(...)
3) Записать туда нули.
Подгрузить библиотеку ко всем процессам в системе (включая те, что с админским приоритетом), сесть на берегу реки и ждать, пока мимо проплывёт труп виновника.