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

问题描述:

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

正是我想要的是这样的:

  1. 调出驱动程序可以检测4444端口的连接进来的(这不是我的问题的一部分)
  2. 驱动程序发送一条消息给用户模式应用。
  3. 该应用程序向用户显示通知,并询问是否应接受/阻止连接。
  4. 用户模式应用程序将用户的响应发回给标注驱动程序。

谢谢!

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

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

的主旨在于,没有直接的方式,驾驶者可以发送一些消息给用户模式应用。

+1

我读过一篇关于[Inverted Call Model](http://www.osronline.com/article.cfm?id=94)的优秀文章。也许这有帮助。 – QuangNHb 2014-11-10 07:44:05

检查这个API调用 - DeviceIoControl

从本质上讲,你会做什么是注册驱动程序中的对象管理器,那么你的GUI应用程序就可以打开它,并发送不同的命令和数据(有缓冲区做),然后你必须发送一些自定义的IOCTL代码(请参考WDK手册)。