Почему SetWindowsHookEx() возвращает NULL, а LastError - ERROR_HOOK_NOT_INSTALLED

У меня есть код, который работал без каких-либо проблем в течение нескольких лет. Он устанавливает низкоуровневый хук клавиатуры, который пользователь использует для активации приложения.

m_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeybHookFn, GetModuleHandle(NULL), 0);

Внезапно для одного пользователя (у него это работало и раньше в течение многих лет) не работает клавиатура. После расследования я вижу, что SetWindowsHookEx() возвращает NULL, а GetLastError() возвращает 0x00000597, что означает ERROR_HOOK_NOT_INSTALLED.

Я не могу найти документацию о том, что это значит.

Каковы возможности, почему это может произойти? Настройки системы безопасности? Права учетной записи пользователя? Пользователь использует Windows 7.

Мне нужен конкретный ответ о том, как сделать эту ошибку, чтобы я мог решить проблему пользователя

1 ответ

Глядя на http://blogs.msdn.com/b/alejacma/archive/2010/10/14/global-hooks-getting-lost-on-windows-7.aspx, кажется, что это может произойти, если загрузка процессора в приоритете.

Еще одна мысль: это сломалось при обновлении до 64-битных окон? Я не знаю, применимо ли это к LL-хукам, но вы не можете внедрить 32-битную DLL в 64-битный процесс.

Наконец, перехватчики LL не будут захватывать ввод в процессе с повышенными правами UAC, если ловушка не была установлена ​​из процесса с повышенными правами UAC (процесс с более низким уровнем привилегий не может захватить ввод с более высоким уровнем привилегий)

Другие вопросы по тегам