当文件被清除(即清空)并保存在 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)
在这种情况下 IRP_MJ_SET_INFORMATION
回调将被调用。你需要检查
Data->Iopb->Parameters.SetFileInformation.FileInformationClass == FileEndOfFileInformation
。在这种情况下,InfoBuffer
将指向 FILE_END_OF_FILE_INFORMATION
,其中新的 EndOfFile 值
- 致电
NtCreateFile
or IoCreateFile
与 CreateDisposition 等于
FILE_OVERWRITE 或 FILE_OVERWRITE_IF 或 FILE_SUPERSEDE(在此案例文件将被删除,并创建同名的新空文件)。 IRP_MJ_CREATE
回调将被调用。你需要检查:
PFLT_PARAMETERS Parameters = &Data->Iopb->Parameters;
ULONG Options = Parameters->Create.Options;
ULONG CreateDisposition = Options >> 24;
Options &= 0x00ffffff;
CreateDisposition
FILE_OVERWRITE
或 FILE_OVERWRITE_IF
或 FILE_SUPERSEDE
的值
我正在开发一个微过滤器来检测 PreWrite 回调 IRP_MJ_WRITE 中某个进程写入的文件。当某些文件内容被修改时,它工作得很好。但当文件内容被修改并设为零大小时,不会获得 PreWrite 回调。即 select 全部清除内容,最后保存文件。这也是一种写作,所以为什么不获取 PreWrite 回调?
如何防止文件写入(清除所有内容并保存文件)? 或者当文件内容被清除(即变空)并保存文件时我们得到什么回调?
作为 minifilter 的初学者,我是不是遗漏了什么或者没有意识到某些概念?
拜托guide/help我
我将非常感谢 Whosebug 社区。
存在 2 种方法(我怎么知道)用于空文件(将其大小设置为 0)
在这种情况下 IRP_MJ_SET_INFORMATION
回调将被调用。你需要检查
Data->Iopb->Parameters.SetFileInformation.FileInformationClass == FileEndOfFileInformation
。在这种情况下,InfoBuffer
将指向 FILE_END_OF_FILE_INFORMATION
,其中新的 EndOfFile 值
- 致电
NtCreateFile
orIoCreateFile
与 CreateDisposition 等于
FILE_OVERWRITE 或 FILE_OVERWRITE_IF 或 FILE_SUPERSEDE(在此案例文件将被删除,并创建同名的新空文件)。 IRP_MJ_CREATE
回调将被调用。你需要检查:
PFLT_PARAMETERS Parameters = &Data->Iopb->Parameters;
ULONG Options = Parameters->Create.Options;
ULONG CreateDisposition = Options >> 24;
Options &= 0x00ffffff;
CreateDisposition
FILE_OVERWRITE
或 FILE_OVERWRITE_IF
或 FILE_SUPERSEDE