FltReadFile函数用于读取超过1 kb的文件

时间:2013-01-08 09:31:50

标签: wdk minifilter windows-kernel

我正在使用WDK的FltReadFile函数来读取文件。我只能读取1kb文件。如何读取超过1kb的文件? 谢谢你。

offset.QuadPart = bytesRead = 0;
    status = FltReadFile( Instance,
                          FileObject,
                          &offset,
                          length,
                          buffer,
                          FLTFL_IO_OPERATION_NON_CACHED |
                          FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET,
                          &bytesRead,
                          NULL,
                          NULL );

1 个答案:

答案 0 :(得分:1)

您正在使用标记FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET,它告诉您在读取文件后不会更新当前文件位置(通常会发生这种情况)。

如果设置了此标志,则offset参数建议在文件中按offset从指定位置读取。

因此,在您的情况下,您已指定offset=0length=1024,它正确地读取 - 1 to 1024 - 来自文件的1KB字节。如果在不更改offset参数的情况下再次进行相同的调用,它将读取相同的1KB字节。

来自FltReadFile的文档查看 ByteOffset 参数文档。

  

ByteOffset [in,optional]指向调用者分配的变量的指针   指定读取文件中的起始字节偏移量   操作即将开始。

     

如果提供了此偏移量,或者在此处指定了FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET标志   Flags参数,FltReadFile不更新文件对象   CurrentByteOffset字段。