Я поддерживаю различные управляемые пользовательские строки в университетском городке. Эти машины в настоящее время работают под управлением Windows XP, и у нас есть служба Windows, которая используется для «блокировки» машины путем блокировки ввода любой клавиатуры или мыши. Блокировка происходит во время нашей установки с использованием скриптов, чтобы пользователи не могли случайно остановить или нарушить процесс. Он также используется для предотвращения доступа пользователей к машинам до тех пор, пока они не будут извлечены на стойке регистрации данной лаборатории. Ctrl + Alt + Del заблокирован с помощью драйвера фильтра клавиатуры, а остальные ключи и мышь блокируются в настоящее время с помощью функции BlockInput() из user32.dll.Блокировка ввода мыши с помощью службы в Vista
В XP служба запускается как локальная система, а для вызова «Разрешить службу для взаимодействия с рабочим столом» должен быть активирован вызов BlockInput(). В Vista это больше не работает, я думаю, из-за изменений Session 0 isolation. Звонок завершается успешно, но вход не блокируется.
Драйвер фильтра клавиатуры по-прежнему работает очень хорошо, и мы можем использовать его для блокировки всей клавиатуры вместо Ctrl + Alt + Del. Но я не понимаю, как мы сейчас будем блокировать мышь. Я даже не уверен, что изоляция сеанса 0 виновата.
Может ли кто-нибудь порекомендовать исправление или обходное решение, позволяющее нам блокировать ввод данных от службы в Vista и за ее пределами? Я искал альтернативный API win32 без везения. Предполагая, что изоляция сеанса 0 виновата, существует ли законный способ вызова функции из сеанса 1 или будет ли это портить цель изоляции? Должен ли я полагаться на повышенный сопутствующий exe, который запускается при входе пользователя в систему и общается с сервисом?
У меня еще не было возможности проверить это. Проблема может закончиться тем, что пользователь консоли не является привилегированной учетной записью, и вызов BlockInput завершится с ошибкой. –
BlockInput все равно должен работать, я не считаю, что он требует привилегий. – Michael
Я написал простое консольное приложение для проверки вызова как ограниченного пользователя в Vista, и это не сработало. Я забываю, что вызов не удался прямо или успешно, и просто не работал. Работа над приложением работала нормально. –