阅读:1181回复:1
关于IoBuildSynchronousFsdRequest 的问题
各位:
我自编一磁盘过滤驱动,试图在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的同步。谢谢! |
|
沙发#
发布于:2005-07-06 13:04
不能实现同步,只能异步
|
|