mirror of
https://github.com/reactos/reactos.git
synced 2025-04-22 13:10:39 +00:00
[CDFS]
- Handle errors from CcInitializeCacheMap and CcCopyRead CORE-6501 svn path=/trunk/; revision=66478
This commit is contained in:
parent
33d9e81156
commit
b9809e6704
5 changed files with 76 additions and 26 deletions
|
@ -19,6 +19,7 @@ list(APPEND SOURCE
|
|||
|
||||
add_library(cdfs SHARED ${SOURCE} cdfs.rc)
|
||||
set_module_type(cdfs kernelmodedriver)
|
||||
target_link_libraries(cdfs ${PSEH_LIB})
|
||||
add_importlibs(cdfs ntoskrnl hal)
|
||||
add_pch(cdfs cdfs.h SOURCE)
|
||||
add_cd_file(TARGET cdfs DESTINATION reactos/system32/drivers NO_CAB FOR all)
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <ntifs.h>
|
||||
#include <ntddcdrm.h>
|
||||
#include <pseh/pseh2.h>
|
||||
|
||||
#define CDFS_BASIC_SECTOR 2048
|
||||
#define CDFS_PRIMARY_DESCRIPTOR_LOCATION 16
|
||||
|
|
|
@ -255,11 +255,23 @@ CdfsFCBInitializeCache(PVCB Vcb,
|
|||
Fcb->FileObject = FileObject;
|
||||
Fcb->DevExt = Vcb;
|
||||
|
||||
CcInitializeCacheMap(FileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
FALSE,
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
_SEH2_TRY
|
||||
{
|
||||
CcInitializeCacheMap(FileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
FALSE,
|
||||
&(CdfsGlobalData->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;
|
||||
|
@ -444,11 +456,21 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb,
|
|||
|
||||
if (CdfsFCBIsDirectory(Fcb))
|
||||
{
|
||||
CcInitializeCacheMap(FileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
FALSE,
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
_SEH2_TRY
|
||||
{
|
||||
CcInitializeCacheMap(FileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
FALSE,
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
FileObject->FsContext2 = NULL;
|
||||
ExFreePoolWithTag(newCCB, TAG_CCB);
|
||||
return _SEH2_GetExceptionCode();
|
||||
}
|
||||
_SEH2_END;
|
||||
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
||||
}
|
||||
|
||||
|
|
|
@ -414,11 +414,20 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
|||
Fcb->Entry.ExtentLocationL = 0;
|
||||
Fcb->Entry.DataLengthL = (DeviceExt->CdInfo.VolumeSpaceSize + DeviceExt->CdInfo.VolumeOffset) * BLOCKSIZE;
|
||||
|
||||
CcInitializeCacheMap(DeviceExt->StreamFileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
TRUE,
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
_SEH2_TRY
|
||||
{
|
||||
CcInitializeCacheMap(DeviceExt->StreamFileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
TRUE,
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
Status = _SEH2_GetExceptionCode();
|
||||
goto ByeBye;
|
||||
}
|
||||
_SEH2_END;
|
||||
|
||||
ExInitializeResourceLite(&DeviceExt->VcbResource);
|
||||
|
||||
|
|
|
@ -91,20 +91,37 @@ CdfsReadFile(PDEVICE_EXTENSION DeviceExt,
|
|||
Fcb->RFCB.ValidDataLength.HighPart,
|
||||
Fcb->RFCB.ValidDataLength.LowPart);
|
||||
|
||||
CcInitializeCacheMap(FileObject,
|
||||
&FileSizes,
|
||||
FALSE,
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
_SEH2_TRY
|
||||
{
|
||||
CcInitializeCacheMap(FileObject,
|
||||
&FileSizes,
|
||||
FALSE,
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
return _SEH2_GetExceptionCode();
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
FileOffset.QuadPart = (LONGLONG)ReadOffset;
|
||||
CcCopyRead(FileObject,
|
||||
&FileOffset,
|
||||
ToRead,
|
||||
TRUE,
|
||||
Buffer,
|
||||
&IoStatus);
|
||||
_SEH2_TRY
|
||||
{
|
||||
CcCopyRead(FileObject,
|
||||
&FileOffset,
|
||||
ToRead,
|
||||
TRUE,
|
||||
Buffer,
|
||||
&IoStatus);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
IoStatus.Information = 0;
|
||||
IoStatus.Status = _SEH2_GetExceptionCode();
|
||||
}
|
||||
_SEH2_END;
|
||||
*LengthRead = IoStatus.Information;
|
||||
|
||||
Status = IoStatus.Status;
|
||||
|
|
Loading…
Reference in a new issue