shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
阅读:3163回复:4

在minifilter的PreCreate中调用FltWriteFile

楼主#
更多 发布于:2009-08-08 10:59
我在minifilter的PreCreate中调用FltCreateFile先创建一个文件,这一步成功了,并且获取到该文件的FileObject;
  status = FltCreateFile(FltObjects->Filter,
                                          FltObjects->Instance,
                                          &hFile,
                                          uDesiredAccess,
                                          &ob,
                                          &IoStatus,
                                          NULL,
                                          uFileAttributes,
                                          uShareAccess,
                                          uCreateDisposition,
                                          uCreateOptions,
                                          NULL,
                                          0,
                                          IO_IGNORE_SHARE_ACCESS_CHECK
                                          ) ;
  if (!NT_SUCCESS(status))
  {
            if (STATUS_OBJECT_NAME_NOT_FOUND == status)
                        FltStatus = FLT_PREOP_SUCCESS_NO_CALLBACK ;
            else
                        FltStatus = FLT_PREOP_COMPLETE ;
            __leave ;
  }

但是调用FltWriteFile向里面写数据的时候确出问题了,偏移为0,缓冲区长度为4K,Buffer为缓冲区内容。调用后返回status = STATUS_SUCCESS,但是BytesReadWrite确为0,文件对象的Offset也没有变,感觉奇怪。
  status = FltWriteFile(
                                       Instance,
                                       FileObject,
                                       &ByteOffset,
                                       Length,
                                       Buffer,
                                       FLTFL_IO_OPERATION_NON_CACHED|FLTFL_IO_OPERATION_PAGING,
                                       BytesReadWrite,
                                       NULL,NULL
                                       );
大家有碰到过这个问题么?
作一名真实,诚实,优秀的科技工作者!
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2009-08-09 20:45
The file size must be 0. And paging WRITEs cannot extend file size.
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
板凳#
发布于:2009-08-10 10:34
多谢版主指点,我在Write前的FileSize是0. 那这里应该如果处理呢,是不是在FltCreateFile的时候就指定Allocation Size为想要的长度呢? 我试验了一下,好像不行。
作一名真实,诚实,优秀的科技工作者!
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
地板#
发布于:2009-08-10 10:36
我在调用FltWriteFile前先FltSetFileInformation设置文件长度,也还是写不进去。
作一名真实,诚实,优秀的科技工作者!
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
地下室#
发布于:2009-08-10 11:23
现在报的一个错误就是:内存或磁盘空间不足,保存失败。
作一名真实,诚实,优秀的科技工作者!
游客

返回顶部