x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
阅读:4258回复:2

Irp->IoStatus->Information 该填什么

楼主#
更多 发布于:2008-11-25 11:18
     我有一个文件过滤驱动    拦截修改某个文件大小的IRP
代码片断
NTSTATUS
SetInformation(
                IN PDEVICE_OBJECT DeviceObject,
                IN PIRP Irp)
          BOOLEAN IsSetFileSize = (FileEndOfFileInformation == irpSp->Parameters.SetFile.FileInformationClass);

           if (TRUE == IsSetFileSize)
    {
        fileendoffileinfo = *(PFILE_END_OF_FILE_INFORMATION)Irp->AssociatedIrp.SystemBuffer;
        hashEntry = GetHash(irpSp->FileObject);
        if (NULL == hashEntry)
        {
            return STATUS_UNSUCCESSFUL;
        }
        if (NULL == hashEntry->filename)
        {
            return STATUS_UNSUCCESSFUL ;
        }
        if (0 != wcscmp((WCHAR *)(hashEntry->filename) + 1,L":\\A.TXT"))
        {
            return STATUS_UNSUCCESSFUL ;
        }
        Irp->IoStatus.Status = STATUS_SUCCESS ;
        Irp->IoStatus.Information = ? ;           //这里应该怎么填        
        IoCompleteRequest(Irp,IO_NO_INCREMENT);
        return STATUS_SUCCESS ;    
    }
}
我想直接返回成功   根据MSDN      The Information member receives the number of bytes set on the file。
因此我的Irp->IoStatus.Information 应该返回 fileendoffileinfo .Endoffile.QuadPart的值    但是类型不匹配啊   一个是ULONG_PTR 一个是LONGLONG    
请问一下我这里应该怎么写呢?
mz_suya
驱动小牛
驱动小牛
  • 注册日期2008-06-13
  • 最后登录2010-08-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望648点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2008-11-25 13:26
   //  Set the information field to the number of bytes actually filled in
 Irp->IoStatus.Information = IrpSp->Parameters.QueryFile.Length;

这个大小是指你返回的数据的大小,所以填写 你返回的数据的长度就可以了。
你可以去看看 fastfat的实现 。
x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
板凳#
发布于:2008-11-26 09:12
Re:Irp->IoStatus->Information  该填什么
不是填这个吧
游客

返回顶部