nth2say
驱动牛犊
驱动牛犊
  • 注册日期2009-10-09
  • 最后登录2014-03-17
  • 粉丝1
  • 关注0
  • 积分28分
  • 威望281点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2440回复:5

postwrite IRQL太高怎么办

楼主#
更多 发布于:2009-10-10 11:08
我想在postwirte里获得文件写入过后的长度,并且将值存入streamcontext中,在修改 streamcontext内容时用ExAcquireResourceExclusiveLite 保证独占性。。

可是postwrite当前的irql 是 2,我该怎么做呢,或者我可以在其他地方得到文件修改后的长度呢,pre操作里得到的值觉得不保险。。
nth2say
驱动牛犊
驱动牛犊
  • 注册日期2009-10-09
  • 最后登录2014-03-17
  • 粉丝1
  • 关注0
  • 积分28分
  • 威望281点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-10-10 11:22
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


wdk里这么说的,不过swapbuffer的例子还是在postread里用了FltDoCompletionProcessingWhenSafe ,这个有什么要注意的么?
neak47
驱动小牛
驱动小牛
  • 注册日期2009-05-25
  • 最后登录2016-01-09
  • 粉丝4
  • 关注0
  • 积分140分
  • 威望1221点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分1分
板凳#
发布于:2009-10-10 11:58
我也想知道在postwrite 如何得到文件修改后的长度?
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
地板#
发布于:2009-10-10 12:49
1. IRQL = DISPATCH_LEVEL时请使用自旋锁KSPIN_LOCK进行同步;

2. 文件Size信息可以从FCB中获得,或者自行计算;

3. 自行计算的方法: 首先Paging-IO不会改变文件Size, 如果是其它类型的IO,
    则可以根据IO前的文件Size, 本次IO的Offset以及本次IO的最终Length(PIO_STATUS_BLOCK.Information)
    判断出本次IO操作是否扩展了文件的Size,如果扩展了文件的Size则更新你的上下文,否则文件Size保持不变;
人总在矛盾中徘徊。。。
nth2say
驱动牛犊
驱动牛犊
  • 注册日期2009-10-09
  • 最后登录2014-03-17
  • 粉丝1
  • 关注0
  • 积分28分
  • 威望281点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-10-10 14:33
知道了,我之前是在postcreate通过读fcb获得文件原始大小的,多谢版主了。。
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
5楼#
发布于:2009-10-12 10:30
非常感谢devia版主分享关于同步的信息。
作一名真实,诚实,优秀的科技工作者!
游客

返回顶部