学习 改写 passthru 过程中。我想:我感兴趣的网络数据到来 就显示到用户模式中:我根据一些教材,想用IoCreateNotificationEvent创建事件,用户模式等待事件 的方式 来通知用户何时该发送IOCTL_xxxxx去取信息,但是IoCreateNotificationEvent在系统重启时报错,好像因为"对于启动时就加载的驱动,在DriverEntry里调用IoCreateNotificationEvent会出错,返回的Event指针为NULL,这样使用这个指针就会出现蓝屏。出错的原因可能是用IoCreateNotificationEvent创建的事件对于用户模式是可见的,而加载驱动的时候整个系统还没起来,所有会出错。(摘自 http://topic.csdn.net/u/20070114/17/f9313bba-b5ca-4e22-8e01-5f6a9ac26b63.html)"。那我要采用何种机制来使 内核模式 通知 用户模式 去取数据??

解决方案 »

  1.   

    我的IoCreateNotificationEvent是放在DriverEntry里,想了个变通的 方式:就是 启动应用程序后-->发送相应IOCTL_??? , 再IoCreateNotificationEvent,然后再做接下来的事情。这样就避免了在 系统启动时 IoCreateNotificationEvent,除了这个方式还有什么方式吗?????
      

  2.   

    驱动程序中用一个队列保存信息,应用程序通过DeviceIoControl与驱动程序通讯,驱动程序在处理IRP_MJ_DEVICE_CONTROL时从队列中取信息返回给应用程序,如果队列为空则等待事件,事件在DriverEntry中用KeInitializeEvent初始化。
      

  3.   

    这个 我知道。 我的问题是:应用程序什么时候来去数据?你上面说等待,不知是何种等待?我用 事件 方式(IoCreateNotificationEvent)时,遇到的问题是 如果IoCreateNotificationEvent放在DriverEntry里则在系统重启时,会蓝屏。我就想问不用IoCreateNotificationEvent+KeClearEvent+KeSetEvent的方式,还能有何种方式?
      

  4.   

    我说的是用KeInitializeEvent,不是IoCreateNotificationEvent。等待是用KeWaitForSingleObject,是在驱动程序中等待。