diff --git a/reactos/drivers/filesystems/ntfs/fcb.c b/reactos/drivers/filesystems/ntfs/fcb.c index fe97f53b0a3..20c6afd5542 100644 --- a/reactos/drivers/filesystems/ntfs/fcb.c +++ b/reactos/drivers/filesystems/ntfs/fcb.c @@ -263,11 +263,23 @@ NtfsFCBInitializeCache(PNTFS_VCB Vcb, Fcb->Vcb = Vcb; Status = STATUS_SUCCESS; - CcInitializeCacheMap(FileObject, - (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), - FALSE, - &(NtfsGlobalData->CacheMgrCallbacks), - Fcb); + _SEH2_TRY + { + CcInitializeCacheMap(FileObject, + (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), + FALSE, + &(NtfsGlobalData->CacheMgrCallbacks), + Fcb); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + FileObject->FsContext2 = NULL; + ExFreePoolWithTag(newCCB, TAG_CCB); + ObDereferenceObject(FileObject); + Fcb->FileObject = NULL; + return _SEH2_GetExceptionCode(); + } + _SEH2_END; ObDereferenceObject(FileObject); Fcb->Flags |= FCB_CACHE_INITIALIZED; @@ -483,11 +495,21 @@ NtfsAttachFCBToFileObject(PNTFS_VCB Vcb, if (!(Fcb->Flags & FCB_CACHE_INITIALIZED)) { - CcInitializeCacheMap(FileObject, - (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), - FALSE, - &(NtfsGlobalData->CacheMgrCallbacks), - Fcb); + _SEH2_TRY + { + CcInitializeCacheMap(FileObject, + (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), + FALSE, + &(NtfsGlobalData->CacheMgrCallbacks), + Fcb); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + FileObject->FsContext2 = NULL; + ExFreePoolWithTag(newCCB, TAG_CCB); + return _SEH2_GetExceptionCode(); + } + _SEH2_END; Fcb->Flags |= FCB_CACHE_INITIALIZED; } diff --git a/reactos/drivers/filesystems/ntfs/fsctl.c b/reactos/drivers/filesystems/ntfs/fsctl.c index cd0845d7e7e..52ebf019f26 100644 --- a/reactos/drivers/filesystems/ntfs/fsctl.c +++ b/reactos/drivers/filesystems/ntfs/fsctl.c @@ -495,11 +495,20 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject, // Fcb->Entry.ExtentLocationL = 0; // Fcb->Entry.DataLengthL = DeviceExt->CdInfo.VolumeSpaceSize * BLOCKSIZE; - CcInitializeCacheMap(Vcb->StreamFileObject, - (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), - FALSE, - &(NtfsGlobalData->CacheMgrCallbacks), - Fcb); + _SEH2_TRY + { + CcInitializeCacheMap(Vcb->StreamFileObject, + (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), + TRUE, + &(NtfsGlobalData->CacheMgrCallbacks), + Fcb); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + goto ByeBye; + } + _SEH2_END; ExInitializeResourceLite(&Vcb->DirResource);