驱动如何通知上层应用呢?
例如: 驱动接收到一些信息如何通知应用程序?
一般来说驱动基于事件来通知上层应用, 是一种惯用的手法.
大体思路是我们创建一个事件.双方打开事件而通信.
一般就2种情况:
1在应用层创建好,然后在驱动层打开它.或者是通过ioctl 将Handle 传下去.
2 反之. 注意的是 如果在 驱动中创建好 在应用层打开注意一下权限.只读打开. 当然你也可以用 ioctl 把Handle 传到应用层.
注意:
1 不要在 DriverEntry 中 创建事件.
2 注意事件名称, 在层用层打开驱动层的 名称是 "Global\\xxxx" 而驱动层创建的名称是:L"\\BaseNamedObjects\\xxxx"
IoCreateNotificationEvent 和 IoCreateSynchronizationEvent 的区别在于 前者是通知事件. 后者是同步事件. 前者需要手动重置. 后者则是自动. IoCreateSynchronizationEvent 遇到Waitxx 函数 就自动重置. 如果在多线程中只有一个线程可以得到信号. |