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