阅读:1186回复:2
过滤驱动处理IRP_MJ类消息时,又收到自身的IRP_MJ_DEVICE_CONTROL消息,会怎么办?
过滤驱动处理IRP_MJ类消息时,还没有返回就又收到了应用程序发给驱动自身的IRP_MJ_DEVICE_CONTROL消息,这个时候驱动会处理IRP_MJ_DEVICE_CONTROL消息吗?
还是等待过滤驱动处理完IRP_MJ? 我想做的是在过滤驱动处理文件系统的IRP_MJ_CREATE消息时,让处理函数睡眠, 并等待应用程序发来唤醒的指令. 如果IRP_MJ_CREATE消息不处理完就不会处理IRP_MJ_DEVICE_CONTROL消息的话那我又该怎么同步到应用程序? 代码如下: 过滤处理: .....挂接例程 case IRP_MJ_CREATE: KeWaitForSingleObject( &g_Event,//全局的 Executive, KernelMode, FALSE, (PLARGE_INTEGER)NULL); ...... 应用程序控制: case IOCTL_ISIFS_SETEVENT: //设置事件,让其有信号 //后两参数如果为True会让线程的IRQL提高一个等级 KeSetEvent(&g_Event, 0, FALSE); ----------------- 现在的效果是所有MJ_CREATE都因为驱动睡眠而挂起了.我该怎么办?\ 有没有好的内核与用户层同步的文章或代码可参考呢? 我的E-mail: chz#china-isi.com |
|
沙发#
发布于:2007-01-22 10:25
你写的这样就可以啊
过滤驱动挂起MJ_CREATE消息时最好放过自己的应用程序,免得死锁 |
|
板凳#
发布于:2007-01-23 00:43
Re:过滤驱动处理IRP_MJ类消息时,又收到自身的IRP_MJ_DEVICE_CONTR
MJ_CREATE should handle FS create and driver CDO create differently. Check SpyCreate() function in FileSpy sample code."g_Event,//全局的". This is dangerous. A driver should support both multi-threading and re-entrance. "让线程的IRQL提高一个等级". So the thread is running at APC level. Why? |
|