Имитация ввода на экране входа в Windows с помощью драйвера

Я пишу инструмент удаленного рабочего стола с открытым исходным кодом, похожий на VNC и TeamViewer. Я заметил, что TeamViewer продолжает захватывать экран на экране переключения пользователей или заблокированной рабочей станции - и позволяет удаленному пользователю ввести пароль и разблокировать рабочую станцию. Я хочу сделать то же самое.

Я прочел:

Обновлено: взаимодействие с пользователем на экране входа в систему Windows < / а>

https://stackoverflow.com/questions/9485530/capturing-image-during-windows-logon-invalid-password

Добавление кнопки управления на экран входа в Windows

подключите горячую клавишу с экрана входа в Windows

https://stackoverflow.com/questions/7183241/launch-windows-on-screen-keyboard-at-logon-screen-on-win7

Драйвер для имитации нажатия клавиш

Удаление экрана входа в Windows через службу

Как поймать ключ на экране входа в Windows 7? < / а>

Отображение окна на экране входа в систему с использованием C # в Windows XP

Из этих сообщений я понял, что имитация ввода в изолированном сеансе определенно не является простым вызовом SendInput (). Но возможно ли это с помощью драйвера (я считаю, что это именно драйвер фильтра клавиатуры, но я не уверен)? Если это так, я думаю о написании на C # службы (чтобы она работала вне сеанса пользователя), которая взаимодействует с драйвером перехвата для имитации нажатия клавиш.

В ответ на вопрос: «Почему бы вам просто не попробовать это?», У меня еще нет .NET-оболочки для Interception, чтобы я мог протестировать такую ​​службу, и поэтому, если общий консенсус придет к выводу, что это невозможно, я не хочу тратить время на написание этой оболочки .NET.

Я нашел драйвер клавиатуры под названием Interception (который в будущем будет выпущен с открытым исходным кодом). Вы можете напрямую найти источник здесь (источником является только коммуникационный API языка C. оболочка, окружающая сам драйвер ядра).

Другой вопрос, который у меня есть ... Я не понимаю, какие файлы составляют драйвер. Его библиотека DLL перехвата, запрограммированная на C, компилируется в .DLL. Но разве это не драйверы какого-то расширения .sys - как бы вы скомпилировали эту DLL перехвата в настоящий драйвер - а затем как бы вы ее установили?

РЕДАКТИРОВАТЬ: Обертка .NET существует. Я модифицировал образец консольного приложения для ввода всего пароля при нажатии клавиши «x», и оно успешно работало - не только на заблокированном экране рабочей станции, но и на экране входа в Windows. Так что работает.

Изменить: библиотека оболочки C # для этого драйвера клавиатуры находится здесь.


person Jason    schedule 11.03.2012    source источник
comment
Я в такой же ситуации. Вы действительно пробовали «SendInput» из службы Windows, чтобы увидеть, отправляется ли какой-либо ввод на экран входа в систему - пока он активен?   -  person tunafish24    schedule 23.06.2015


Ответы (2)


В настоящее время настоящие драйверы не имеют открытого исходного кода. Установщик драйверов устанавливает их (keyboard.sys и mouse.sys), открытый исходный код - это только API связи с ними. Я планирую переписать компоненты ядра, прежде чем открывать исходный код.

person pepper_chico    schedule 12.03.2012
comment
Отредактировал мой пост, и как интересно - драйвер клавиатуры и мыши с открытым исходным кодом. Большое спасибо. - person Jason; 13.03.2012
comment
Так хорошо ли прошел опенсорсинг? Кажется, только API все еще с открытым исходным кодом, но ни слова о DLL / SYS - person DARKGuy; 11.12.2019

Для других людей, заинтересованных в ответе: да, работает.

Используйте оболочку .NET для драйвера клавиатуры Interception, находящегося по адресу https://github.com/candera/kchordr , и поиграйте. Он заменит ключи даже на экране входа в Windows.

person Jason    schedule 11.03.2012