microbe
驱动小牛
驱动小牛
  • 注册日期2007-12-10
  • 最后登录2011-01-17
  • 粉丝1
  • 关注0
  • 积分914分
  • 威望420点
  • 贡献值1点
  • 好评度88点
  • 原创分0分
  • 专家分1分
阅读:2673回复:6

关于FltDoCompletionProcessingWhenSafe

楼主#
更多 发布于:2008-05-16 16:12
我现在在测试MS-Word时,发现大一点的文件(200多页吧(1.5M),不算特别大),在使用Word另存为功能时,会发生word死锁。我用Driver Verifier检测我的驱动也没有检测出来,无奈之下只好打印详细信息,通读代码,后来我发现有可能是read中的解密出了问题,在查找DDK帮助时,我发现FltDoCompletionProcessingWhenSafe这个调用有如下的说明:
Caution  To avoid deadlocks, FltDoCompletionProcessingWhenSafe cannot be called for I/O operations that can be directly completed by a driver in the storage stack, such as the following:

IRP_MJ_READ
IRP_MJ_WRITE
IRP_MJ_FLUSH_BUFFERS

不凑巧的是我的read里面就正好用到了这个调用,而且我发现微软给的SwapBuffer里面也用到了这个调用,难道是我对这个caution的理解有误么?

还有没有兄弟们在测试word时碰见跟我一模一样的情况呢?希望能够得到大家的指导!无尽感谢
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-16 16:40
没有遇到这样的问题。
microbe
驱动小牛
驱动小牛
  • 注册日期2007-12-10
  • 最后登录2011-01-17
  • 粉丝1
  • 关注0
  • 积分914分
  • 威望420点
  • 贡献值1点
  • 好评度88点
  • 原创分0分
  • 专家分1分
板凳#
发布于:2008-05-16 16:57
tooflat大哥,那你的意思是这个调用这么用没有问题咯,也就是说我的这个应该不会是因为这个调用本身是吧,呵呵。
真没搞懂它这个caution是用来caution什么的。。。
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-05-16 17:19
M$的例子中调用FltDoCompletionProcessingWhenSafe是有条件的,no MDL, no SystemBuffer
microbe
驱动小牛
驱动小牛
  • 注册日期2007-12-10
  • 最后登录2011-01-17
  • 粉丝1
  • 关注0
  • 积分914分
  • 威望420点
  • 贡献值1点
  • 好评度88点
  • 原创分0分
  • 专家分1分
地下室#
发布于:2008-05-17 08:41
了解了,谢谢tooflat老大 ,我发觉我的问题不是在这里,继续查ing。。。
nvicly
驱动牛犊
驱动牛犊
  • 注册日期2006-09-12
  • 最后登录2019-01-21
  • 粉丝1
  • 关注0
  • 积分12分
  • 威望158点
  • 贡献值0点
  • 好评度82点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2008-05-17 14:53
遇到过同样的问题, 在IRP_MJ_READ分派中为了避免IRQL过高而调用FltDoCompletionProcessingWhenSafe,  WORD写出文件时就会页面错误.

遵守3楼的调用条件后问题解决.
lovehhy
驱动小牛
驱动小牛
  • 注册日期2007-09-17
  • 最后登录2010-09-17
  • 粉丝0
  • 关注0
  • 积分1028分
  • 威望244点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-10-09 16:20
可以用WorkItem来实现相同的效果
游客

返回顶部