6

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

正是我想要的是这样的:

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

谢谢!

4

3 回答 3

4

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

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

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

于 2011-02-12T18:55:47.877 回答
3

检查此 API 调用 -DeviceIoControl

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

于 2011-02-10T21:30:44.867 回答
0

如果您的驱动程序注册为微过滤器驱动程序,则可以使用微过滤器通信函数,例如FltSendMessage

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

于 2019-11-23T17:07:54.183 回答