分析:
参照DDK下fastfat源码,CCB_FLAG_DELETE_ON_CLOSE会在FatCreateNewFile时被设置到CCB的Flags中,FCB_STATE_DELETE_ON_CLOSE会在FatSetDispositionInfo时被设置到FCB的FcbState中,在FatCommonCleanup时会根据CCB中的Flags重新设置FCB中FcbState的,最终根据FCB中的FcbState判断是否删除文件。
以下是几种情况,目前跟分析能对应上:
情况1:
1、线程T1,NtCreateFile,使用DeleteOnClose标记
2、线程T2,NtCreateFile
3、线程T1,NtClose
4、线程T2,NtClose,此时文件被删除
情况2:
1、线程T1,NtCreateFile,使用DeleteOnClose标记
2、线程T2,NtCreateFile
3、线程T2,NtClose
4、线程T1,NtClose,此时文件被删除
情况3:
1、线程T1,NtCreateFile,使用DeleteOnClose标记
2、线程T2,NtCreateFile
3、线程T1,NtClose
4、线程T2,NtSetFileInformation,使用FileDispositionInformation、FALSE标记
5、线程T2,NtClose,此时文件未被删除
情况4:
1、线程T1,NtCreateFile,使用DeleteOnClose标记
2、线程T2,NtCreateFile
3、线程T2,NtSetFileInformation,使用FileDispositionInformation、FALSE标记
4、线程T2,NtClose
5、线程T1,NtClose,此时文件被删除
情况5:
1、线程T2,NtCreateFile
2、线程T1,NtCreateFile,使用DeleteOnClose标记
3、线程T1,NtClose
4、线程T2,NtClose,此时文件被删除
情况6:
1、线程T2,NtCreateFile
2、线程T1,NtCreateFile,使用DeleteOnClose标记
3、线程T2,NtClose
4、线程T1,NtClose,此时文件被删除
情况7:
1、线程T2,NtCreateFile
2、线程T1,NtCreateFile,使用DeleteOnClose标记
3、线程T1,NtClose
4、线程T2,NtSetFileInformation,使用FileDispositionInformation、FALSE标记
5、线程T2,NtClose,此时文件未被删除
情况8:
1、线程T2,NtCreateFile
2、线程T1,NtCreateFile,使用DeleteOnClose标记
3、线程T2,NtSetFileInformation,使用FileDispositionInformation、FALSE标记
4、线程T2,NtClose
5、线程T1,NtClose,此时文件被删除