如何编写一个在输入到达内核之前拦截输入的程序?

时间:2015-07-04 20:13:28

标签: c++ c windows input kernel

有这个程序 install-interception.exe ,可以从这里下载:http://www.oblita.com/interception.html

它在到达内核之前拦截任何类型的输入。例如,它允许我区分Windows级别的多个键盘。无论如何,这是一个非常方便的程序,但我不知道它是如何工作的。这是我能找到的关于源代码的全部内容:https://github.com/oblitum/Interception/issues/5

所以我使用了一些我不理解的东西,我想问一下你是否可以指出我如何编写一个如何做同样的c / c ++程序的方向。

修改

我想我不妨描述一下我使用这个程序的原因。 使用这个输入拦截器,我编写了一个程序,允许我执行以下操作: 我有一个主键盘和一个宏键盘。主键盘工作正常,但宏键盘有一些额外的功能。 通过按下宏键盘上的按钮可以激活这些功能,按钮是由程序启动时加载的XML文件决定的。这些是功能:

  • 插入文字
  • 启用/禁用键盘输入捕获+将输入写入文件
  • 复制到剪贴板1/2/3等
  • 从剪贴板1/2/3等粘贴
  • 运行程序(例如,启动chrome,运行批处理文件)
  • 找到程序X / Y / Z的下一个实例,并将其放在屏幕上。例如:查找“Visual Studio”的下一个实例并将其放在前面的屏幕上。基本上是替换Alt-Tab。
  • 在宏键盘按钮上放置贴纸,这样我就可以轻松识别每个按钮的作用:D:D

基本上我用截取API编写了这个非常方便的程序,但我不知道输入在传递给API之前是如何截获的,我想学习如何,所以我可以更完整地理解我的程序。 / p>

1 个答案:

答案 0 :(得分:-1)

我相信我找到了答案的一部分:

有用户模式和内核模式。我想我需要一个在内核模式下运行的程序。

https://msdn.microsoft.com/en-us/library/windows/hardware/ff554836(v=vs.85).aspx

我想我会理解 install-interception.exe 是如何通过阅读&编程的。从以下3个教程中学习:

http://www.adlice.com/kernelmode-rootkits-part-1-ssdt-hooks/

http://www.adlice.com/kernelmode-rootkits-part-2-irp-hooks/

http://www.adlice.com/kernelmode-rootkits-part-3-kernel-filters/

我有很多读书要做:O