阻止Vista中服务的鼠标输入

时间:2009-03-16 18:58:39

标签: winapi windows-vista

我在大学校园里维护着各种托管用户实验室。这些机器目前都运行Windows XP,我们有一个Windows服务,用于通过阻止任何键盘或鼠标输入来“锁定”机器。锁定在我们的脚本化操作系统安装期间发生,因此用户无法意外停止或中断该过程。它还用于防止用户登录到计算机,直到他们在给定实验室的前台检出。 Ctrl + Alt + Del通过键盘过滤器驱动程序被阻止,其余的键和鼠标当前使用user32.dll中的BlockInput()功能被阻止。

在XP中,该服务作为本地系统运行,并且必须通过BlockInput()调用启用“允许服务与桌面交互”复选框才能成功。在Vista下,由于Session 0 isolation更改,我猜不到这种情况。调用成功,但实际上并未阻止输入。

键盘滤镜驱动程序仍然正常工作,我们可以使用它来阻止整个键盘而不是Ctrl + Alt + Del。但我现在不知道如何阻止鼠标。我甚至不完全确定会话0的隔离是罪魁祸首。

任何人都可以推荐修复或解决方法,以便我们阻止来自Vista及更高版本的服务的鼠标输入吗?我没有运气就寻找替代的win32 API。假设会话0的隔离是罪魁祸首,是否有合法的方法从会话1调用该函数,或者这种方式是否会破坏隔离的目的?我是否必须依赖于在用户登录时运行的高级伴侣exe并与服务进行通信?

1 个答案:

答案 0 :(得分:0)

从服务中,您可以使用WTSEnumerateSessions获取所有登录的用户会话,使用WTSQueryUserToken获取登录用户的令牌,然后使用带有该令牌的CreateProcessAsUser来获取在用户桌面上运行的代码。这样做的缺点是代码将以登录用户身份运行。由于所有输入都被禁用,这可能足够安全,并且至少与现有的XP解决方案一样安全。]

编辑:BlockInput需要高强制完整性级别。您可以尝试将此组添加到令牌中,但是您可以在桌面上运行具有更高权限的代码,并且可能会受到攻击。

另一种方法可能是使用您的服务来禁用计算机上的所有HID类设备。

相关问题