重命名或移动文件时,API允许覆盖目标文件(如果已存在)。我可以通过检查FLT_IO_PARAMETER_BLOCK
Iopb->MajorFunction == IRP_MJ_SET_INFORMATION
和
Iopb->Parameters.SetFileInformation.FileInformationClass == FileRenameInformation
我还可以看到ReplaceIfExists
结构中设置了FILE_RENAME_INFORMATION
。如果操作实际上导致现有文件被覆盖,是否也可以以某种方式检查?
对于IRP_MJ_CREATE
,如果文件已被覆盖,Information
中的IO_STATUS_BLOCK
字段在后期操作回调中设置为FILE_OVERWRITTEN
。重命名/移动也存在类似的东西吗?