hustwing
驱动牛犊
驱动牛犊
  • 注册日期2007-08-19
  • 最后登录2012-03-03
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
阅读:1583回复:7

IRP_MJ_CLOSE中使用线程技术无法避免重入??

楼主#
更多 发布于:2007-12-06 10:10
我使用楚狂人教程中的线程技术避免重入,在CREATE中工作良好,但是在CLOSE中,当我自己线程中的代码执行到ZwClose时,系统就没有下文了,好像是ZwClose从来没有返回一样。

查了一下微软官方的文档,有一篇上面说:Unlike IRP_MJ_CREATE and IRP_MJ_CLEANUP requests, an IRP_MJ_CLOSE request does not arrive in the context of the caller. 那也就是说我不能仅用PsGetCurrentThreadId() == Mythread->ThreadId的判断来避免重入了??

好郁闷啊,搞了几天了,各位大侠帮帮忙啊!
潜龙勿用-->见龙在田-->飞龙在天-->亢龙有悔
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2007-12-06 11:23
首先,你要明确IRP_MJ_CLOSE并是和ZwClose是相对应的.ZwClose和IRP_MJ_CLEANUP相对应.当FileObject的引用计数减为一的时候会自动触发IRP_MJ_CLOSE.
对于重入的处理,还是要根据的实际情况进行分析,重入本身不会导致死锁,导致死锁的根本是资源互锁,只有你找到什么资源互锁,才能解决问题.
商务MSN:YanDong_8212@163.com
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
板凳#
发布于:2007-12-06 11:32
说错了,减为0时才发IRP_MJ_CLOSE
商务MSN:YanDong_8212@163.com
hustwing
驱动牛犊
驱动牛犊
  • 注册日期2007-08-19
  • 最后登录2012-03-03
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-06 11:42
但是我如果直接在我的CLOSE派遣函数中直接执行ZwClose(),确实会使系统堆栈溢出然后宕机;我调试了以后发现确实还是因为重入。但是当我把我的ZwClose()相关操作放入自己的线程中去做以后,系统没有宕,但是可能出现了你所说的资源互锁。

对了,想知道,ZwClose一定是需要一个对应的IRP_MJ_CLEANUP或一个对应的IRP_MJ_CLOSE被完成以后才会返回吗?

谢谢楼上大侠的指教!
潜龙勿用-->见龙在田-->飞龙在天-->亢龙有悔
hustwing
驱动牛犊
驱动牛犊
  • 注册日期2007-08-19
  • 最后登录2012-03-03
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-12-06 11:44
我之所以放在close的派遣函数里面,是因为我在跟踪写字板的读写文件时,似乎没有发现IRP_MJ_CLEANUP的irp啊,只有close。。。
潜龙勿用-->见龙在田-->飞龙在天-->亢龙有悔
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
5楼#
发布于:2007-12-06 15:05
一个ZwClose会引起一个IRP_MJ_CLEANUP,如果是正常关闭就肯定有IRP_MJ_CLEANUP,IRP_CLOSE有可能是系统进程自动发起的.
商务MSN:YanDong_8212@163.com
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
6楼#
发布于:2007-12-06 15:08
按你说的如果是当机,那就要分析DUMP文件
商务MSN:YanDong_8212@163.com
hustwing
驱动牛犊
驱动牛犊
  • 注册日期2007-08-19
  • 最后登录2012-03-03
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-12-07 09:17
o(∩_∩)o...3ks Very much!!
潜龙勿用-->见龙在田-->飞龙在天-->亢龙有悔
游客

返回顶部