使用驱动程序在Windows登录屏幕中模拟输入

我正在编写一个开源的远程桌面工具,类似于VNC和TeamViewer。 我注意到TeamViewer继续在Switch Users或Workstation Locked屏幕上捕获屏幕 – 并允许远程用户输入密码并解锁工作站。 我想做同样的事情。

我读了:

更新:在Windows登录屏幕上与用户交互

https://stackoverflow.com/questions/9485530/capturing-image-during-windows-logon-invalid-password

将命令按钮添加到Windows登录屏幕

从Windows登录屏幕挂钩热键

https://stackoverflow.com/questions/7183241/launch-windows-on-screen-keyboard-at-logon-screen-on-win7

模拟Keypress的驱动程序

通过服务删除Windows登录屏幕

如何在Windows 7登录屏幕中捕获密钥?

在Windows XP中使用C#在登录屏幕上显示窗口

从这些post中,我收集了在隔离会话中模拟输入肯定不是对SendInput()的简单调用。 但是有可能使用驱动程序(我相信它特别是键盘filter驱动程序,但我不确定)? 如果是这样,我正在考虑在C#中编写一个服务(以便它在用户会话之外运行),它与拦截驱动程序交互以模拟按键。

回答:“为什么你不试试呢?”,对于我来说,没有一个用于拦截的.NET包装器来测试这样的服务,所以如果普遍的共识得出结论认为这是不可能的,那么我不想花时间编写.NET包装器。

我发现了一个名为Interception的键盘驱动程序(将来会发布这个驱动程序) 。 您可以在此处直接找到源(源只是围绕实际内核驱动程序的C通信API包装器) 。

我有另一个问题……我对哪些文件构成驱动程序感到困惑。 他用C编程的拦截DLL库编译成.DLL。 但是不是某些.sys扩展的驱动程序 – 如何将该拦截DLL编译成实际的驱动程序 – 然后你将如何安装它?

编辑: .NET包装器确实存在 。 当我按下’x’键时,我修改了示例控制台应用程序以键入我的整个密码,并且它成功运行 – 不仅在工作站锁定屏幕上,而且在Windows登录屏幕上。 所以它有效。

编辑: 这个键盘驱动程序的C#包装器库在这里 。

目前,实际的驱动程序不是开源的。 驱动程序安装程序安装它们(keyboard.sys和mouse.sys),什么是开源只是与它们通信的API。 我打算在开源之前重写内核组件。

对于其他对答案感兴趣的人:是的,它有效。

使用.NET包装器获取https://github.com/candera/kchordr上的拦截键盘驱动程序,然后玩游戏。 它甚至会在Windows登录屏幕上替换密钥。