CcFastReadNoWait++;\r
}\r
\r
-_SEH_FILTER(FsRtlCcCopyFilter)\r
-{\r
- LONG ExceptionDisposition;\r
-\r
- /* Check if this was an expected exception */\r
- ExceptionDisposition = FsRtlIsNtstatusExpected(_SEH_GetExceptionCode() ?\r
- EXCEPTION_EXECUTE_HANDLER :\r
- EXCEPTION_CONTINUE_SEARCH);\r
-\r
- /* Continue execution if we expected it, otherwise fail the call */\r
- return ExceptionDisposition;\r
-}\r
-\r
-\r
/*\r
* @implemented\r
*/\r
PFAST_IO_DISPATCH FastIoDispatch;\r
PDEVICE_OBJECT Device;\r
BOOLEAN Result = TRUE;\r
- ULONG PageCount = COMPUTE_PAGES_SPANNED(FileOffset,Length);\r
+ ULONG PageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(FileOffset,Length);\r
\r
PAGED_CODE();\r
ASSERT(FileObject);\r
/* Set this as top-level IRP */\r
PsGetCurrentThread()->TopLevelIrp = FSRTL_FAST_IO_TOP_LEVEL_IRP;\r
\r
- _SEH_TRY\r
+ _SEH2_TRY\r
{\r
/* Make sure the IO and file size is below 4GB */\r
if (Wait && !(Offset.HighPart | FcbHeader->FileSize.HighPart )) {\r
FileObject->CurrentByteOffset.QuadPart += IoStatus->Information;\r
}\r
}\r
- _SEH_EXCEPT(FsRtlCcCopyFilter)\r
+ _SEH2_EXCEPT(FsRtlIsNtstatusExpected(_SEH2_GetExceptionCode()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)\r
{\r
Result = FALSE;\r
- } _SEH_END;\r
+ } _SEH2_END;\r
\r
PsGetCurrentThread()->TopLevelIrp = 0;\r
\r
PFSRTL_COMMON_FCB_HEADER FcbHeader;\r
\r
/* WDK doc. Offset=0xffffffffffffffff indicates append to the end of file */\r
- BOOLEAN FileOffsetAppend = ((FileOffset->HighPart == 0xffffffff) && (FileOffset->LowPart == 0xffffffff));\r
+ BOOLEAN FileOffsetAppend = ((FileOffset->HighPart == (LONG)0xffffffff) && (FileOffset->LowPart == 0xffffffff));\r
BOOLEAN ResourceAquiredShared = FALSE;\r
\r
BOOLEAN b_4GB = FALSE;\r
/* Set this as top-level IRP */\r
PsGetCurrentThread()->TopLevelIrp = FSRTL_FAST_IO_TOP_LEVEL_IRP;\r
\r
- _SEH_TRY\r
+ _SEH2_TRY\r
{\r
if (Offset.LowPart > FcbHeader->ValidDataLength.LowPart) {\r
LARGE_INTEGER OffsetVar;\r
/* Call the cache manager */\r
CcFastCopyWrite(FileObject,Offset.LowPart,Length,Buffer);\r
}\r
- _SEH_EXCEPT(FsRtlCcCopyFilter)\r
+ _SEH2_EXCEPT(FsRtlIsNtstatusExpected(_SEH2_GetExceptionCode()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)\r
{\r
Result = FALSE;\r
- } _SEH_END;\r
+ } _SEH2_END;\r
\r
/* Remove ourselves at the top level component after the IO is done */\r
PsGetCurrentThread()->TopLevelIrp = 0;\r
/* Nagar p.544 */\r
/* Set ourselves as top component */\r
PsGetCurrentThread()->TopLevelIrp = FSRTL_FAST_IO_TOP_LEVEL_IRP;\r
- _SEH_TRY\r
+ _SEH2_TRY\r
{\r
BOOLEAN CallCc = TRUE;\r
/* Check if there is a gap between the end of the file and the offset\r
if (CallCc) {\r
Result = CcCopyWrite(FileObject,&Offset,Length, Wait, Buffer);\r
}\r
- }_SEH_EXCEPT(FsRtlCcCopyFilter)\r
+ }_SEH2_EXCEPT(FsRtlIsNtstatusExpected(_SEH2_GetExceptionCode()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)\r
{\r
Result = FALSE;\r
- } _SEH_END;\r
+ } _SEH2_END;\r
\r
/* Reset the top component */\r
PsGetCurrentThread()->TopLevelIrp = FSRTL_FAST_IO_TOP_LEVEL_IRP;\r
/* Set this as top-level IRP */\r
PsGetCurrentThread()->TopLevelIrp = FSRTL_FAST_IO_TOP_LEVEL_IRP;\r
\r
- _SEH_TRY\r
+ _SEH2_TRY\r
{\r
/* Attempt a read */\r
CcMdlRead(FileObject, FileOffset, Length, MdlChain, IoStatus);\r
FileObject->Flags |= FO_FILE_FAST_IO_READ;\r
}\r
- _SEH_EXCEPT(FsRtlCcCopyFilter)\r
+ _SEH2_EXCEPT(FsRtlIsNtstatusExpected(_SEH2_GetExceptionCode()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)\r
{\r
Result = FALSE;\r
- } _SEH_END;\r
+ } _SEH2_END;\r
\r
\r
/* Remove the top-level IRP flag */\r
LARGE_INTEGER Offset;\r
\r
/* WDK doc. Offset=0xffffffffffffffff indicates append to the end of file */\r
- BOOLEAN FileOffsetAppend = ((FileOffset->HighPart == 0xffffffff) && (FileOffset->LowPart == 0xffffffff));\r
+ BOOLEAN FileOffsetAppend = ((FileOffset->HighPart == (LONG)0xffffffff) && (FileOffset->LowPart == 0xffffffff));\r
BOOLEAN FileSizeModified = FALSE;\r
BOOLEAN ResourceAquiredShared = FALSE;\r
\r
/* Nagar p.544 */\r
/* Set ourselves as top component */\r
PsGetCurrentThread()->TopLevelIrp = FSRTL_FAST_IO_TOP_LEVEL_IRP;\r
- _SEH_TRY\r
+ _SEH2_TRY\r
{\r
/* Check if there is a gap between the end of the file and the offset\r
If yes, then we have to zero the data\r
CcPrepareMdlWrite(FileObject,&Offset,Length,MdlChain,IoStatus);\r
}\r
\r
- }_SEH_EXCEPT(FsRtlCcCopyFilter)\r
+ }_SEH2_EXCEPT(FsRtlIsNtstatusExpected(_SEH2_GetExceptionCode()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)\r
{\r
Result = FALSE;\r
- } _SEH_END;\r
+ } _SEH2_END;\r
\r
/* Reset the top component */\r
PsGetCurrentThread()->TopLevelIrp = 0;\r