将事件从内核模式发送到Windows服务

我正在编写一个由内核模式驱动程序和用户模式Windows服务组成的软件。 内核驱动程序需要通知服务不同的事件和信息,然后服务将处理。

我的问题是:build立这种沟通的最佳方式是什么? 我知道使用微filter和FilterGetMessage()可以从内核获取消息,但是这需要轮询内核以获取新数据。 当需要处理新的数据时,我需要一个让内核通知服务的系统。

作为一个方面说明,服务本身使用生产者消费者模式,所以会有一个线程专门用于从内核获取数据,并将其放入另一组工作线程的队列中进行处理。 任何关于这个devise的想法也是受欢迎的。

为什么不在服务端使用ReadFile或DeviceIoControl? 驾驶员侧简单的IRP,当你有东西要报告时完成。 该服务将需要启动线程或使用I / O完成回调。 并且CancelIo在服务退出时取消阻塞呼叫。