【发布时间】:2009-03-16 18:58:39
【问题描述】:
我在大学校园内维护着各种托管用户实验室。这些机器目前都运行 Windows XP,我们有一个 Windows 服务,用于通过阻止任何键盘或鼠标输入来“锁定”机器。锁定发生在我们的脚本操作系统安装期间,因此用户无法意外停止或中断该过程。它还用于防止用户在给定实验室的前台签出之前登录机器。 Ctrl+Alt+Del 通过键盘过滤器驱动程序被阻止,其余的键和鼠标当前被使用来自 user32.dll 的BlockInput() 函数阻止。
在 XP 中,服务作为本地系统运行,并且必须从 BlockInput() 调用中启用“允许服务与桌面交互”复选框才能成功。在 Vista 下,我猜这不再有效,因为 Session 0 isolation 发生了变化。调用成功,但输入实际上并没有被阻塞。
键盘过滤驱动程序仍然可以正常工作,我们可以使用它来阻止整个键盘,而不仅仅是 Ctrl+Alt+Del。但是我不知道我们现在要如何阻止鼠标。我什至不完全确定 Session 0 的隔离是罪魁祸首。
谁能推荐一个修复或解决方法,以允许我们阻止来自 Vista 及更高版本服务的鼠标输入?我一直在寻找替代的 win32 API,但没有运气。假设 Session 0 隔离是罪魁祸首,是否有合法的方式从 Session 1 调用该函数,或者这种方式会破坏隔离的目的?我是否必须依赖在用户登录时运行并与服务通信的提升的配套 exe?
【问题讨论】:
标签: winapi windows-vista