Windows 驱动与应用通信 之 事件对象

时间:2020-12-06 22:35:24

驱动如何通知上层应用呢?

例如: 驱动接收到一些信息如何通知应用程序?

一般来说驱动基于事件来通知上层应用, 是一种惯用的手法. 

大体思路是我们创建一个事件.双方打开事件而通信.

一般就2种情况:

1在应用层创建好,然后在驱动层打开它.或者是通过ioctl 将Handle 传下去.

2 反之. 注意的是 如果在 驱动中创建好 在应用层打开注意一下权限.只读打开.  当然你也可以用 ioctl 把Handle 传到应用层.



注意:

1 不要在 DriverEntry 中 创建事件.

2 注意事件名称, 在层用层打开驱动层的 名称是  "Global\\xxxx"    而驱动层创建的名称是:L"\\BaseNamedObjects\\xxxx"





IoCreateNotificationEvent  和 IoCreateSynchronizationEvent 的区别在于 

前者是通知事件. 后者是同步事件. 前者需要手动重置. 后者则是自动. 

IoCreateSynchronizationEvent 遇到Waitxx 函数 就自动重置. 如果在多线程中只有一个线程可以得到信号.