内核模式和用户模式应用程序之间的通信

时间:2011-02-08 22:03:18

标签: windows kernel driver callouts wfp

我已经构建了一个在内核模式下运行的WFP标注驱动程序。 现在,我试图弄清楚如何在这个驱动程序和我在用户模式下运行的GUI应用程序之间进行通信。有什么想法吗?

我想要的是这样的东西:

  1. 标注驱动程序在端口4444上检测到接收连接(这不是我的问题的一部分)
  2. 驱动程序向用户模式应用程序发送消息。
  3. 该应用向用户显示通知,并询问是否应接受/阻止连接。
  4. 用户模式应用程序将用户对响应驱动程序的响应发回。
  5. 谢谢!

3 个答案:

答案 0 :(得分:4)

我同意LordDoskias。您需要创建一个设备对象并使其可用于Win32领域。然后,您可以使用CreateFileReadFileWriteFile和已提及的DeviceIoControl来发送请求。

为了从驱动程序获取应用程序的通知,您可以使用所谓的inverted call model。您发送一些IRP(通过上述机制之一)并以异步方式(或在单独的线程中)执行此操作。然后,驱动程序让它们悬空,直到它必须通知用户模式组件有关某事,然后返回完成的IRP。替代方法是设置一些事件并拥有UM请求,无论驱动程序保留在某种队列中......

要点是,驱动程序无法直接向用户模式应用程序发送某些消息。

答案 1 :(得分:3)

检查此API调用 - DeviceIoControl

基本上你要做的是在对象管理器中注册驱动程序,然后你的GUI应用程序将能够打开它并发送不同的命令和数据(有缓冲区来做),然后你必须发送一些定制的IOCTL代码(请参阅WDK手册)。

答案 2 :(得分:0)

如果您的驱动程序已注册为微型过滤器驱动程序, 您可以使用小型过滤器通信功能,例如FltSendMessage

否则,您可以使用其他用户已经建议的DeviceIoControl函数。