dionysus77
驱动小牛
驱动小牛
  • 注册日期2006-11-15
  • 最后登录2011-12-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望392点
  • 贡献值0点
  • 好评度177点
  • 原创分0分
  • 专家分0分
阅读:1342回复:4

向devia大侠请教写文件尾的问题

楼主#
更多 发布于:2007-05-10 18:23
我在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中写文件尾?

请您指教!
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2007-05-11 08:36
1. 通常IRP的flag使用默认值;
2. 通常用同步方式;
3. 其实只要能保证加密标识被安全写回,不紊乱,那么在cleanup或close中都可以!
人总在矛盾中徘徊。。。
dionysus77
驱动小牛
驱动小牛
  • 注册日期2006-11-15
  • 最后登录2011-12-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望392点
  • 贡献值0点
  • 好评度177点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-11 10:27
开始的问题解决了,原来我写文件尾是发irp给自己的。现在可以完成返回了,但新的问题出现了:
就像用setinformation时也会出现的问题——status和information都为0,成功了但没有数据写入
hongpengtao
驱动小牛
驱动小牛
  • 注册日期2006-03-16
  • 最后登录2015-06-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望190点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-14 16:15
这个问题我也有
我用ZwWriteFile写
status和information都为0
ZwWriteFile返回c0000002
但不是每次都这样,在文件比较大的时候会经常发生
hongpengtao
驱动小牛
驱动小牛
  • 注册日期2006-03-16
  • 最后登录2015-06-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望190点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-05-14 16:15
这个问题我也有
我用ZwWriteFile写
status和information都为0
ZwWriteFile返回c0000002
但不是每次都这样,在文件比较大的时候会经常发生
游客

返回顶部