Windows下删除文件的实现方式本质上有以下两种:
1. 使用FILE_DELETE_ON_CLOSE
ZwCreateFile和IoCreateFile的CreateOptions 参数可以通过使用FILE_DELETE_ON_CLOSE标志来实现删除文件的功能。顾名思义,使用此标志打开的文件在关闭时会删除该文件。
如要在文件过滤驱动中判断是否设置了FILE_DELETE_ON_CLOSE标志,只需截获IRP_MJ_CREATE请求,通过pIrpStack->Parameters.Create.Options判断即可。
2. 使用FileDispositionInformation
这种方式需要使用Native API ZwSetInformationFile,将最后一个参数FileInformationClass设置为FileDispositionInformation即可。ZwSetInformationFile的详细用法可参见DDK。Windows API中的DeleteFile就是使用这种方式实现删除文件功能的。
如需要在文件过滤驱动中监视这种方式的删除文件,只需监视IRP_MJ_SET_INFORMATION请求,通过判断pIrpStack->Parameters.SetFile.FileInformationClass是否为FileDispositionInformation且((PFILE_DISPOSITION_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->DeleteFile是否为TRUE来判断是否是删除文件操作。
1. 使用FILE_DELETE_ON_CLOSE
ZwCreateFile和IoCreateFile的CreateOptions 参数可以通过使用FILE_DELETE_ON_CLOSE标志来实现删除文件的功能。顾名思义,使用此标志打开的文件在关闭时会删除该文件。
如要在文件过滤驱动中判断是否设置了FILE_DELETE_ON_CLOSE标志,只需截获IRP_MJ_CREATE请求,通过pIrpStack->Parameters.Create.Options判断即可。
2. 使用FileDispositionInformation
这种方式需要使用Native API ZwSetInformationFile,将最后一个参数FileInformationClass设置为FileDispositionInformation即可。ZwSetInformationFile的详细用法可参见DDK。Windows API中的DeleteFile就是使用这种方式实现删除文件功能的。
如需要在文件过滤驱动中监视这种方式的删除文件,只需监视IRP_MJ_SET_INFORMATION请求,通过判断pIrpStack->Parameters.SetFile.FileInformationClass是否为FileDispositionInformation且((PFILE_DISPOSITION_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->DeleteFile是否为TRUE来判断是否是删除文件操作。
本文介绍了Windows系统中删除文件的两种核心实现方式:一是利用FILE_DELETE_ON_CLOSE标志,在文件关闭时进行删除;二是通过调用ZwSetInformationFile,并设置FileDispositionInformation来实现删除。文章还讨论了如何在文件过滤驱动中识别这两种删除操作。
1347

被折叠的 条评论
为什么被折叠?



