阅读:1342回复:4
向devia大侠请教写文件尾的问题
我在IRP_MJ_CLOSE中自己发送irp写文件尾,总是在等待irp完成时僵住,但不报错。代码如下:
//构造同步irp并设置参数 KeInitializeEvent(&Event, NotificationEvent, FALSE); Irp = IoBuildSynchronousFsdRequest( MajorFunction, DeviceObject, Buffer, Length, ByteOffset, &Event, IoStatus ); if (!Irp) return STATUS_INSUFFICIENT_RESOURCES; Irp->Flags |= IrpFlags; IrpSp = IoGetNextIrpStackLocation(Irp); IrpSp->FileObject = FileObject; //发送并等待完成 (运行至此,停止,一直等待) Status = IoCallDriver(DeviceObject, Irp); if (STATUS_PENDING == Status) { KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); } return IoStatus->Status; 我试过0和IRP_NOCACHE两种flag,情况一样。 问题是: 1。这里的irp用什么flag? 2。是否该用异步irp? 3。或者应该在cleanup中写文件尾? 请您指教! |
|
沙发#
发布于:2007-05-11 08:36
1. 通常IRP的flag使用默认值;
2. 通常用同步方式; 3. 其实只要能保证加密标识被安全写回,不紊乱,那么在cleanup或close中都可以! |
|
|
板凳#
发布于:2007-05-11 10:27
开始的问题解决了,原来我写文件尾是发irp给自己的。现在可以完成返回了,但新的问题出现了:
就像用setinformation时也会出现的问题——status和information都为0,成功了但没有数据写入 |
|
地板#
发布于:2007-05-14 16:15
这个问题我也有
我用ZwWriteFile写 status和information都为0 ZwWriteFile返回c0000002 但不是每次都这样,在文件比较大的时候会经常发生 |
|
地下室#
发布于:2007-05-14 16:15
这个问题我也有
我用ZwWriteFile写 status和information都为0 ZwWriteFile返回c0000002 但不是每次都这样,在文件比较大的时候会经常发生 |
|