22 #define UDF_BUG_CHECK_ID UDF_FILE_CLEANUP 62 Irp->IoStatus.Status = RC;
63 Irp->IoStatus.Information = 0;
66 UDFPrint((
"Deregister Autoformat\n"));
86 Irp->IoStatus.Status = RC;
87 Irp->IoStatus.Information = 0;
159 TmPrint((
"UDFCommonCleanup\n"));
182 AdPrint((
" %s\n", CanWait ?
"Wt" :
"nw"));
200 AdPrint((
"Cleaning up Volume\n"));
222 Vcb->VolumeLockFileObject =
NULL;
223 Vcb->VolumeLockPID = -1;
229 MmPrint((
" CcUninitializeCacheMap()\n"));
253 AdPrint((
"Cleaning up file: ??? \n"));
259 if(
Fcb->FileInfo->ParentFile) {
265 AcquiredParentFCB =
TRUE;
279 #ifndef UDF_READ_ONLY_BUILD 293 #endif //UDF_READ_ONLY_BUILD 305 #ifndef UDF_READ_ONLY_BUILD 325 if(
Fcb->FileInfo->ParentFile) {
331 AcquiredParentFCB =
FALSE;
339 #ifdef UDF_DELAYED_CLOSE 343 #endif //UDF_DELAYED_CLOSE 347 if(
Fcb->FileInfo->ParentFile) {
353 AcquiredParentFCB =
TRUE;
365 NtReqFcb->CommonFCBHeader.FileSize.QuadPart =
366 NtReqFcb->CommonFCBHeader.ValidDataLength.QuadPart = 0;
372 #endif //UDF_READ_ONLY_BUILD 374 #ifdef UDF_DELAYED_CLOSE 375 if ((
Fcb->ReferenceCount == 1) &&
380 #endif //UDF_DELAYED_CLOSE 382 NextFileInfo =
Fcb->FileInfo;
384 #ifndef UDF_READ_ONLY_BUILD 405 if(AcquiredPagingIo) {
418 AdPrint((
"Error flushing file !!!\n"));
430 if(NextFileInfo->
Dloc &&
449 goto DiscardDelete_1;
456 ForcedCleanUp =
TRUE;
487 #endif //UDF_READ_ONLY_BUILD 496 ForcedCleanUp =
FALSE;
500 (
NtReqFcb->SectionObject.DataSectionObject) ) {
501 BOOLEAN LastNonCached = (!
Fcb->CachedOpenHandleCount &&
514 #ifndef UDF_READ_ONLY_BUILD 517 if( (OldFileSize =
NtReqFcb->CommonFCBHeader.ValidDataLength.QuadPart) <
526 #endif //UDF_READ_ONLY_BUILD 527 MmPrint((
" CcFlushCache()\n"));
536 if(ForcedCleanUp || LastNonCached) {
537 if(
NtReqFcb->SectionObject.DataSectionObject) {
538 MmPrint((
" CcPurgeCacheSection()\n"));
547 #ifndef UDF_READ_ONLY_BUILD 589 NtReqFcb->CommonFCBHeader.AllocationSize.QuadPart;
612 #endif //UDF_READ_ONLY_BUILD 617 MmPrint((
" CcUninitializeCacheMap()\n"));
620 MmPrint((
" CcUninitializeCacheMap()\n"));
630 if(
Fcb->FileInfo->ParentFile) {
636 AcquiredParentFCB =
FALSE;
663 if(AcquiredParentFCB) {
664 if(
Fcb->FileInfo->ParentFile) {
679 Irp->IoStatus.Status = RC;
680 Irp->IoStatus.Information = 0;
713 AdPrint((
"UDFCloseFileInfoChain\n"));
714 for(; TreeLength && fi; TreeLength--) {
731 AdPrint((
"Acquiring VCB...\n"));
#define KeQuerySystemTime(t)
#define UDFAcquireResourceExclusive(Resource, CanWait)
VOID UDFReleaseIrpContext(PtrUDFIrpContext PtrIrpContext)
PtrUDFIrpContext UDFAllocateIrpContext(PIRP Irp, PDEVICE_OBJECT PtrTargetDeviceObject)
PEPROCESS NTAPI IoGetRequestorProcess(IN PIRP Irp)
BOOLEAN NTAPI CcPurgeCacheSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN UninitializeCacheMaps)
#define UDFRemoveFromDelayedQueue(Fcb)
struct _UDFContextControlBlock * PtrUDFCCB
#define STATUS_INSUFFICIENT_RESOURCES
#define FsRtlEnterFileSystem
#define UDFGetFileAllocationSize(Vcb, FileInfo)
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
#define FsRtlExitFileSystem
VOID NTAPI FsRtlNotifyFullChangeDirectory(IN PNOTIFY_SYNC NotifySync, IN PLIST_ENTRY NotifyList, IN PVOID FsContext, IN PSTRING FullDirectoryName, IN BOOLEAN WatchTree, IN BOOLEAN IgnoreBuffer, IN ULONG CompletionFilter, IN PIRP NotifyIrp, IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL)
VOID UDFLogEvent(NTSTATUS UDFEventLogId, NTSTATUS RC)
#define UDF_FCB_DELETE_PARENT
#define STATUS_INVALID_PARAMETER
#define UDF_NODE_TYPE_VCB
NTSTATUS NTAPI UDFCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define UDF_CCB_ATTRIBUTES_SET
#define UDF_NODE_TYPE_FCB
#define UDFReleaseResource(Resource)
NTSTATUS UDFWriteSecurity(IN PVCB Vcb, IN PtrUDFFCB Fcb, IN PSECURITY_DESCRIPTOR *SecurityDesc)
#define UDF_FCB_DELETE_ON_CLOSE
__inline PDIR_INDEX_ITEM UDFDirIndex(IN PDIR_INDEX_HDR hDirNdx, IN uint_di i)
#define FSRTL_VOLUME_UNLOCK
struct _FCB::@709::@712 Fcb
#define FILE_NOTIFY_CHANGE_LAST_WRITE
NTSTATUS UDFMarkStreamsForDeletion(IN PVCB Vcb, IN PtrUDFFCB Fcb, IN BOOLEAN ForDel)
#define FILE_NOTIFY_CHANGE_FILE_NAME
PDEVICE_OBJECT TargetDeviceObject
void UDFSetFileSizeInDirNdx(IN PVCB Vcb, IN PUDF_FILE_INFO FileInfo, IN int64 *ASize)
#define FILE_NOTIFY_CHANGE_DIR_NAME
#define FILE_ACTION_REMOVED_STREAM
#define UDF_IRP_CONTEXT_CAN_BLOCK
VOID NTAPI IoRemoveShareAccess(IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess)
#define UDF_NODE_TYPE_NT_REQ_FCB
#define UDF_CCB_MODIFY_TIME_SET
VOID NTAPI FsRtlNotifyCleanup(IN PNOTIFY_SYNC NotifySync, IN PLIST_ENTRY NotifyList, IN PVOID FsContext)
#define FO_FILE_SIZE_CHANGED
#define UDF_VCB_FLAGS_VOLUME_READ_ONLY
_In_ PDEVICE_OBJECT DeviceObject
#define IO_DISK_INCREMENT
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PDIR_INDEX_HDR UDFGetDirIndexByFileInfo(IN PUDF_FILE_INFO FileInfo)
#define FO_FILE_FAST_IO_READ
#define UDFIsADirectory(FileInfo)
#define FILE_ACTION_MODIFIED
#define _SEH2_GetExceptionInformation()
#define FILE_ACTION_MODIFIED_STREAM
#define UDFInterlockedDecrement(addr)
#define FILE_ACTION_REMOVED
#define _SEH2_AbnormalTermination()
#define IoCompleteRequest
OSSTATUS UDFFlushFile__(IN PVCB Vcb, IN PUDF_FILE_INFO FileInfo, IN ULONG FlushFlags)
OSSTATUS UDFPretendFileDeleted__(IN PVCB Vcb, IN PUDF_FILE_INFO FileInfo)
#define UDF_VCB_IC_UPDATE_ACCESS_TIME
__inline VOID UDFNotifyFullReportChange(PVCB V, PUDF_FILE_INFO FI, ULONG E, ULONG A)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
NTSTATUS UDFExceptionHandler(PtrUDFIrpContext PtrIrpContext, PIRP Irp)
#define UDFIsAStreamDir(FI)
#define UDF_CCB_CREATE_TIME_SET
#define UDF_VCB_IC_UPDATE_MODIFY_TIME
#define UDFRemoveFromSystemDelayedQueue(Fcb)
#define NT_SUCCESS(StatCode)
#define UDF_VCB_FLAGS_OUR_DEVICE_DRIVER
#define UDF_VCB_IC_UPDATE_ARCH_BIT
#define FILE_NOTIFY_CHANGE_STREAM_NAME
#define UDF_FCB_DIRECTORY
#define UDF_CCB_DELETE_ON_CLOSE
VOID UDFSetFileXTime(IN PUDF_FILE_INFO FileInfo, IN LONGLONG *CrtTime, IN LONGLONG *AccTime, IN LONGLONG *AttrTime, IN LONGLONG *ChgTime)
NTSTATUS UDFCommonCleanup(PtrUDFIrpContext PtrIrpContext, PIRP Irp)
struct _UDF_FILE_INFO * ParentFile
BOOLEAN __fastcall UDFIsIrpTopLevel(PIRP Irp)
#define UDF_FCB_ROOT_DIRECTORY
#define FO_CACHE_SUPPORTED
_In_opt_ PLARGE_INTEGER NewFileSize
struct _UDF_FILE_INFO * SDirInfo
#define FILE_ATTRIBUTE_ARCHIVE
#define STATUS_CANNOT_DELETE
#define ValidateFileInfo(fi)
#define UDF_NTREQ_FCB_DELETED
#define UDF_VCB_FLAGS_VOLUME_MOUNTED
_In_ PLARGE_INTEGER NtTime
#define UDFIsSDirDeleted(FI)
VOID NTAPI IoSetTopLevelIrp(IN PIRP Irp)
#define UDF_FCB_DELAY_CLOSE
#define UDFIsDirEmpty__(fi)
long UDFExceptionFilter(PtrUDFIrpContext PtrIrpContext, PEXCEPTION_POINTERS PtrExceptionPointers)
#define UDF_VCB_IC_UPDATE_ATTR_TIME
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
NTSTATUS NTAPI FsRtlFastUnlockAll(IN PFILE_LOCK FileLock, IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN PVOID Context OPTIONAL)
OSSTATUS UDFResetDeviceDriver(IN PVCB Vcb, IN PDEVICE_OBJECT TargetDeviceObject, IN BOOLEAN Unlock)
#define UDFAcquireResourceShared(Resource, CanWait)
OSSTATUS UDFCloseFile__(IN PVCB Vcb, IN PUDF_FILE_INFO FileInfo)
#define UDF_CCB_ACCESS_TIME_SET
NTSTATUS UDFCloseFileInfoChain(IN PVCB Vcb, IN PUDF_FILE_INFO fi, IN ULONG TreeLength, IN BOOLEAN VcbAcquired)
FAST_IO_POSSIBLE NTAPI UDFIsFastIoPossible(IN PtrUDFFCB Fcb)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
#define UDF_ERROR_INTERNAL_ERROR
VOID UDFAttributesToUDF(IN PDIR_INDEX_ITEM FileDirNdx, IN tag *FileEntry, IN ULONG NTAttr)
BOOLEAN NTAPI CcUninitializeCacheMap(IN PFILE_OBJECT FileObject, IN OPTIONAL PLARGE_INTEGER TruncateSize, IN OPTIONAL PCACHE_UNINITIALIZE_EVENT UninitializeEvent)
#define FO_CLEANUP_COMPLETE
#define FILE_NOTIFY_CHANGE_ATTRIBUTES
_In_ PIO_STACK_LOCATION IrpSp
VOID NTAPI CcSetFileSizes(IN PFILE_OBJECT FileObject, IN PCC_FILE_SIZES FileSizes)
#define UDF_CHECK_PAGING_IO_RESOURCE(NTReqFCB)
OSSTATUS UDFResizeFile__(IN PVCB Vcb, IN OUT PUDF_FILE_INFO FileInfo, IN int64 NewLength)
OSSTATUS UDFUnlinkFile__(IN PVCB Vcb, IN PUDF_FILE_INFO FileInfo, IN BOOLEAN FreeSpace)
#define UDF_CCB_WRITE_TIME_SET
ULONG UDFAttributesToNT(IN PDIR_INDEX_ITEM FileDirNdx, IN tag *FileEntry)
#define UDFNotifyVolumeEvent(FileObject, EventCode)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
BOOLEAN UDFAcquireResourceExclusiveWithCheck(IN PERESOURCE Resource)
#define _SEH2_EXCEPT(...)
#define FILE_NOTIFY_CHANGE_LAST_ACCESS
uint16 UDFGetFileLinkCount(IN PUDF_FILE_INFO FileInfo)
#define UDF_VCB_FLAGS_VOLUME_LOCKED