2009-03-16 2 views
0

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

ответ

0

Из сервиса вы можете использовать WTSEnumerateSessions, чтобы получить все записи в пользовательских сеансах, WTSQueryUserToken, чтобы получить токен входа в систему, а затем использовать CreateProcessAsUser с этим токеном, чтобы получить код, запущенный на рабочем столе пользователя. Это имеет тот недостаток, что код будет работать как зарегистрированный пользователь. Поскольку все входные данные отключены, это, вероятно, достаточно безопасно и, по крайней мере, столь же безопасно, как и существующее решение XP.]

EDIT: BlockInput требует высокого обязательного уровня целостности. Вы можете попробовать добавить эту группу к токену, но тогда у вас есть код с более высокими правами, запущенными на рабочем столе и потенциально открытыми для атак.

Альтернативой может быть использование вашей службы, чтобы отключить все устройства класса HID на машине.

+0

У меня еще не было возможности проверить это. Проблема может закончиться тем, что пользователь консоли не является привилегированной учетной записью, и вызов BlockInput завершится с ошибкой. –

+0

BlockInput все равно должен работать, я не считаю, что он требует привилегий. – Michael

+0

Я написал простое консольное приложение для проверки вызова как ограниченного пользователя в Vista, и это не сработало. Я забываю, что вызов не удался прямо или успешно, и просто не работал. Работа над приложением работала нормально. –

 Смежные вопросы

  • Нет связанных вопросов^_^