当文件被清除(即清空)并保存在 Minifilter 中时,我们会得到什么回调?

what callback do we get when file is cleared (i.e. Made empty) and saved in Minifilter?

我正在开发一个微过滤器来检测 PreWrite 回调 IRP_MJ_WRITE 中某个进程写入的文件。当某些文件内容被修改时,它工作得很好。但当文件内容被修改并设为零大小时,不会获得 PreWrite 回调。即 select 全部清除内容,最后保存文件。这也是一种写作,所以为什么不获取 PreWrite 回调?

如何防止文件写入(清除所有内容并保存文件)? 或者当文件内容被清除(即变空)并保存文件时我们得到什么回调?

作为 minifilter 的初学者,我是不是遗漏了什么或者没有意识到某些概念?

拜托guide/help我

我将非常感谢 Whosebug 社区。

存在 2 种方法(我怎么知道)用于空文件(将其大小设置为 0)

  1. 呼叫 NtSetInformationFile FileEndOfFileInformation

在这种情况下 IRP_MJ_SET_INFORMATION 回调将被调用。你需要检查

Data->Iopb->Parameters.SetFileInformation.FileInformationClass == FileEndOfFileInformation。在这种情况下,InfoBuffer 将指向 FILE_END_OF_FILE_INFORMATION,其中新的 EndOfFile

  1. 致电NtCreateFile or IoCreateFile

CreateDisposition 等于 FILE_OVERWRITEFILE_OVERWRITE_IFFILE_SUPERSEDE(在此案例文件将被删除,并创建同名的新空文件)。 IRP_MJ_CREATE 回调将被调用。你需要检查:

PFLT_PARAMETERS Parameters = &Data->Iopb->Parameters;

ULONG Options = Parameters->Create.Options;
ULONG CreateDisposition = Options >> 24;

Options &= 0x00ffffff;

CreateDisposition FILE_OVERWRITEFILE_OVERWRITE_IFFILE_SUPERSEDE

的值