mirror of
https://github.com/reactos/reactos.git
synced 2025-07-27 20:22:05 +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)
|
add_library(cdfs SHARED ${SOURCE} cdfs.rc)
|
||||||
set_module_type(cdfs kernelmodedriver)
|
set_module_type(cdfs kernelmodedriver)
|
||||||
|
target_link_libraries(cdfs ${PSEH_LIB})
|
||||||
add_importlibs(cdfs ntoskrnl hal)
|
add_importlibs(cdfs ntoskrnl hal)
|
||||||
add_pch(cdfs cdfs.h SOURCE)
|
add_pch(cdfs cdfs.h SOURCE)
|
||||||
add_cd_file(TARGET cdfs DESTINATION reactos/system32/drivers NO_CAB FOR all)
|
add_cd_file(TARGET cdfs DESTINATION reactos/system32/drivers NO_CAB FOR all)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <ntifs.h>
|
#include <ntifs.h>
|
||||||
#include <ntddcdrm.h>
|
#include <ntddcdrm.h>
|
||||||
|
#include <pseh/pseh2.h>
|
||||||
|
|
||||||
#define CDFS_BASIC_SECTOR 2048
|
#define CDFS_BASIC_SECTOR 2048
|
||||||
#define CDFS_PRIMARY_DESCRIPTOR_LOCATION 16
|
#define CDFS_PRIMARY_DESCRIPTOR_LOCATION 16
|
||||||
|
|
|
@ -255,11 +255,23 @@ CdfsFCBInitializeCache(PVCB Vcb,
|
||||||
Fcb->FileObject = FileObject;
|
Fcb->FileObject = FileObject;
|
||||||
Fcb->DevExt = Vcb;
|
Fcb->DevExt = Vcb;
|
||||||
|
|
||||||
|
_SEH2_TRY
|
||||||
|
{
|
||||||
CcInitializeCacheMap(FileObject,
|
CcInitializeCacheMap(FileObject,
|
||||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||||
FALSE,
|
FALSE,
|
||||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||||
Fcb);
|
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);
|
ObDereferenceObject(FileObject);
|
||||||
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
||||||
|
@ -443,12 +455,22 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb,
|
||||||
Fcb->DevExt = Vcb;
|
Fcb->DevExt = Vcb;
|
||||||
|
|
||||||
if (CdfsFCBIsDirectory(Fcb))
|
if (CdfsFCBIsDirectory(Fcb))
|
||||||
|
{
|
||||||
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
CcInitializeCacheMap(FileObject,
|
CcInitializeCacheMap(FileObject,
|
||||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||||
FALSE,
|
FALSE,
|
||||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||||
Fcb);
|
Fcb);
|
||||||
|
}
|
||||||
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
FileObject->FsContext2 = NULL;
|
||||||
|
ExFreePoolWithTag(newCCB, TAG_CCB);
|
||||||
|
return _SEH2_GetExceptionCode();
|
||||||
|
}
|
||||||
|
_SEH2_END;
|
||||||
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -414,11 +414,20 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
Fcb->Entry.ExtentLocationL = 0;
|
Fcb->Entry.ExtentLocationL = 0;
|
||||||
Fcb->Entry.DataLengthL = (DeviceExt->CdInfo.VolumeSpaceSize + DeviceExt->CdInfo.VolumeOffset) * BLOCKSIZE;
|
Fcb->Entry.DataLengthL = (DeviceExt->CdInfo.VolumeSpaceSize + DeviceExt->CdInfo.VolumeOffset) * BLOCKSIZE;
|
||||||
|
|
||||||
|
_SEH2_TRY
|
||||||
|
{
|
||||||
CcInitializeCacheMap(DeviceExt->StreamFileObject,
|
CcInitializeCacheMap(DeviceExt->StreamFileObject,
|
||||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||||
TRUE,
|
TRUE,
|
||||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||||
Fcb);
|
Fcb);
|
||||||
|
}
|
||||||
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
Status = _SEH2_GetExceptionCode();
|
||||||
|
goto ByeBye;
|
||||||
|
}
|
||||||
|
_SEH2_END;
|
||||||
|
|
||||||
ExInitializeResourceLite(&DeviceExt->VcbResource);
|
ExInitializeResourceLite(&DeviceExt->VcbResource);
|
||||||
|
|
||||||
|
|
|
@ -91,20 +91,37 @@ CdfsReadFile(PDEVICE_EXTENSION DeviceExt,
|
||||||
Fcb->RFCB.ValidDataLength.HighPart,
|
Fcb->RFCB.ValidDataLength.HighPart,
|
||||||
Fcb->RFCB.ValidDataLength.LowPart);
|
Fcb->RFCB.ValidDataLength.LowPart);
|
||||||
|
|
||||||
|
_SEH2_TRY
|
||||||
|
{
|
||||||
CcInitializeCacheMap(FileObject,
|
CcInitializeCacheMap(FileObject,
|
||||||
&FileSizes,
|
&FileSizes,
|
||||||
FALSE,
|
FALSE,
|
||||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||||
Fcb);
|
Fcb);
|
||||||
}
|
}
|
||||||
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
return _SEH2_GetExceptionCode();
|
||||||
|
}
|
||||||
|
_SEH2_END;
|
||||||
|
}
|
||||||
|
|
||||||
FileOffset.QuadPart = (LONGLONG)ReadOffset;
|
FileOffset.QuadPart = (LONGLONG)ReadOffset;
|
||||||
|
_SEH2_TRY
|
||||||
|
{
|
||||||
CcCopyRead(FileObject,
|
CcCopyRead(FileObject,
|
||||||
&FileOffset,
|
&FileOffset,
|
||||||
ToRead,
|
ToRead,
|
||||||
TRUE,
|
TRUE,
|
||||||
Buffer,
|
Buffer,
|
||||||
&IoStatus);
|
&IoStatus);
|
||||||
|
}
|
||||||
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
IoStatus.Information = 0;
|
||||||
|
IoStatus.Status = _SEH2_GetExceptionCode();
|
||||||
|
}
|
||||||
|
_SEH2_END;
|
||||||
*LengthRead = IoStatus.Information;
|
*LengthRead = IoStatus.Information;
|
||||||
|
|
||||||
Status = IoStatus.Status;
|
Status = IoStatus.Status;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue