hook418
驱动牛犊
驱动牛犊
  • 注册日期2003-12-28
  • 最后登录2009-12-24
  • 粉丝0
  • 关注0
  • 积分191分
  • 威望28点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1180回复:1

关于IoBuildSynchronousFsdRequest 的问题

楼主#
更多 发布于:2005-07-05 20:04
  各位:
     我自编一磁盘过滤驱动,试图在read dispatch 中建一新的IRP实现同步读磁盘。如下:

    Irp = IoBuildSynchronousFsdRequest(
        IRP_MJ_READ,
        BlockDeviceObject,
        Buffer,
        Length,
        Offset,
        &Event,
        pIoStatus
        );

    Status = IoCallDriver(BlockDeviceObject, Irp);

    if(Status == STATUS_PENDING)
    {
        KeWaitForSingleObject(
            &Event,
            Executive,
            KernelMode,
            FALSE,
            NULL
            );
        Status = pIoStatus->Status;
    }

reboot后,头四个读IRP工作正常,处理第五个读IRP时KeWaitForSingleObject不能返回。其中头四个读IRP的长度均小于0x1000,第五个IRP中起始扇区和第一个读IRP相同,均为分区的bootsector,但长度为0x1000。我查看了osronline论坛,其中有个回贴,说“You can not wait in the read dispatch handler because you can be called at a raised IRQL.”  不知是否是此原因?若时,该如何在read dispatch 中实现新建irp的同步。谢谢!
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-06 13:04
不能实现同步,只能异步
游客

返回顶部