liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1186回复:2

过滤驱动处理IRP_MJ类消息时,又收到自身的IRP_MJ_DEVICE_CONTROL消息,会怎么办?

楼主#
更多 发布于:2007-01-17 17:13
  过滤驱动处理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
GNiDiA
驱动小牛
驱动小牛
  • 注册日期2006-10-11
  • 最后登录2017-10-09
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望145点
  • 贡献值0点
  • 好评度124点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-01-22 10:25
你写的这样就可以啊
过滤驱动挂起MJ_CREATE消息时最好放过自己的应用程序,免得死锁
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
板凳#
发布于: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?
游客

返回顶部