Почему 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 (процесс с более низким уровнем привилегий не может захватить ввод с более высоким уровнем привилегий)