Имитация ввода на экране входа в Windows с помощью драйвера - PullRequest
2 голосов
/ 11 марта 2012

Я пишу инструмент удаленного рабочего стола с открытым исходным кодом, похожий на 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 - как бы вы скомпилировали эту библиотеку Interception DLL в реальный драйвер - и затем как бы вы ее установили?

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

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

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

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

0 голосов
/ 11 марта 2012

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

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

...