Global Keyboard Hook от службы Windows - PullRequest
4 голосов
/ 28 апреля 2011

Можно ли написать глобальную службу Keyboard Hook from windows (xp и 7)? (использование SetWindowsHookEx не работает из системного сервиса)

Ответы [ 2 ]

10 голосов
/ 28 апреля 2011

Документация для SetWindowsHookEx гласит:

или со всеми потоками на том же рабочем столе, что и вызывающий поток.

Таким образом, вы должны быть связаны с одним и тем же рабочим столом (и будет несколько рабочих столов даже без учета служб терминалов: обычный рабочий стол, защищенный рабочий стол (используется для UAC и входа в систему) и заставка).

Поскольку службы не связаны с интерактивным сеансом (и из Windows V6 этого не может быть), вам потребуется процесс в сеансе пользователя для выполнения перехвата и связи с бэкэнд-службой (например, через именованный канал ). И не забудьте протестировать, когда никто не вошел в систему, а вошли несколько пользователей.

5 голосов
/ 29 апреля 2011

Подводя итог сказанному Ричардом (и добавив мой собственный комментарий): Вы не можете напрямую установить глобальный хук клавиатуры из службы Windows, начиная с Windows Vista. Однако все равно было бы логичным выбором использовать службу Windows, поскольку у вас будут все необходимые привилегии для установки глобальных хуков. Вы можете дублировать свои привилегии для дочерних процессов, которые вы создаете в каждом сеансе пользователя, вошедшего в систему, чтобы позволить вашим дочерним процессам устанавливать глобальные хуки в своем собственном рабочем столе / сеансе, даже если пользователь не обладает соответствующими привилегиями.

Лично (если вы пишете кейлоггер) вместо того, чтобы объединять все зарегистрированные нажатия клавиш в один процесс и записывать их на диск, может иметь смысл, чтобы каждый отдельный процесс записывал отдельные файлы в соответствии со своим именем пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...