【问题标题】:minifilter driver | tracking changes in files微过滤器驱动程序 |跟踪文件的变化
【发布时间】:2017-11-07 14:06:02
【问题描述】:

我想要实现的是拦截对文件的每次写入并跟踪文件中的更改。我想跟踪写入前后的文件内容有多少不同。

到目前为止,在我的微过滤驱动程序中,我注册了 IRP_MJ_WRITE 回调,现在可以拦截对文件的写入。但是我仍然不确定如何获取[preoperation]之前的文件内容和[postoperation]之后的内容。 我在回调函数中的参数是: PCFLT_RELATED_OBJECTS、PFLT_CALLBACK_DATA 和我在这些文件中找不到与文件本身内容相关的任何内容。

【问题讨论】:

  • 我从来没有写过微过滤器,但我想你可能会使用以下组合:(1)注册文件打开通知,当这种情况发生时,发出你自己的读取操作(IRP_MJ_READ ) 获取初始文件内容 (2) 当您收到每个 IRP_MJ_WRITE 时,在传递写入之前读取相应的初始内容(如果有) (3) 确定文件何时关闭(可能很棘手?)然后去读取任何未修改的内容,如果您关心的话。
  • FLT_PARAMETERS in PFLT_CALLBACK_DATA->Iopb 将为您提供该 IRP 所需的参数。参考:msdn.microsoft.com/en-us/library/windows/hardware/…

标签: windows-kernel minifilter


【解决方案1】:

这些是可以改变文件中数据的操作:

  1. 修改文件:IRP_MJ_WRITEIRP_MJ_SET_INFORMATION(特别是FileEndOfFileInformationFileValidDataLengthInformation信息类)、IRP_MJ_FILE_SYSTEM_CONTROL(特别是 FSCTL_OFFLOAD_WRITEFSCTL_WRITE_RAW_ENCRYPTEDFSCTL_SET_ZERO_DATA fsctl 代码)。

至于文件本身的内容,您只需要自己阅读即可。 例如,如果您指的是正在写入的缓冲区,请查看this 以了解有关回调数据中 IRP_MJ_WRITE 参数的更多信息。本质上,缓冲区位于 Data->Iopb->Parameters.Write.WriteBuffer/MdlAddress

确保正确处理该内存,否则会导致蓝屏。

祝你好运。

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2016-02-14
    • 2012-08-11
    • 1970-01-01
    • 2010-12-22
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多