https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f723d230a0bc4b7b78ca1…
commit f723d230a0bc4b7b78ca125abecce137bb96bed6
Author: Pierre Schweitzer <pierre(a)reactos.org>
AuthorDate: Fri Nov 17 22:18:53 2017 +0100
[CDFS_NEW] _SEH2_FINALLY implement SEH support for real instead of its current stub.
This notably fixes BSOD on media change
---
drivers/filesystems/cdfs_new/allocsup.c | 6 ++--
drivers/filesystems/cdfs_new/cachesup.c | 6 ++--
drivers/filesystems/cdfs_new/cddata.c | 16 +++++-----
drivers/filesystems/cdfs_new/cdprocs.h | 15 +++++-----
drivers/filesystems/cdfs_new/cleanup.c | 12 ++++----
drivers/filesystems/cdfs_new/create.c | 26 ++++++++--------
drivers/filesystems/cdfs_new/deviosup.c | 20 ++++++-------
drivers/filesystems/cdfs_new/dirctrl.c | 20 ++++++-------
drivers/filesystems/cdfs_new/fileinfo.c | 36 +++++++++++------------
drivers/filesystems/cdfs_new/fsctrl.c | 34 ++++++++++-----------
drivers/filesystems/cdfs_new/fspdisp.c | 8 ++---
drivers/filesystems/cdfs_new/lockctrl.c | 24 +++++++--------
drivers/filesystems/cdfs_new/read.c | 12 ++++----
drivers/filesystems/cdfs_new/strucsup.c | 26 ++++++++--------
drivers/filesystems/cdfs_new/verfysup.c | 8 ++---
drivers/filesystems/cdfs_new/volinfo.c | 6 ++--
drivers/filesystems/cdfs_new/wdk_wnet_to_ros.diff | 31 -------------------
17 files changed, 138 insertions(+), 168 deletions(-)
diff --git a/drivers/filesystems/cdfs_new/allocsup.c
b/drivers/filesystems/cdfs_new/allocsup.c
index b875eca143..93b35bcfda 100755
--- a/drivers/filesystems/cdfs_new/allocsup.c
+++ b/drivers/filesystems/cdfs_new/allocsup.c
@@ -149,7 +149,7 @@ Return Value:
// Use a try finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// We use a loop to perform the lookup. If we don't find the mapping in
the
@@ -296,7 +296,7 @@ Return Value:
FirstPass = FALSE;
}
- } finally {
+ } _SEH2_FINALLY {
if (CleanupParent) {
@@ -311,7 +311,7 @@ Return Value:
}
if (UnlockFcb) { CdUnlockFcb( IrpContext, Fcb ); }
- }
+ } _SEH2_END;
return;
}
diff --git a/drivers/filesystems/cdfs_new/cachesup.c
b/drivers/filesystems/cdfs_new/cachesup.c
index 87b75bbc51..600262f84a 100755
--- a/drivers/filesystems/cdfs_new/cachesup.c
+++ b/drivers/filesystems/cdfs_new/cachesup.c
@@ -94,7 +94,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Create the internal stream. The Vpb should be pointing at our volume
@@ -272,7 +272,7 @@ Return Value:
}
}
- } finally {
+ } _SEH2_FINALLY {
//
// Cleanup any dirent structures we may have used.
@@ -306,7 +306,7 @@ Return Value:
}
CdUnlockFcb( IrpContext, Fcb );
- }
+ } _SEH2_END;
return;
}
diff --git a/drivers/filesystems/cdfs_new/cddata.c
b/drivers/filesystems/cdfs_new/cddata.c
index dbd572a797..c8367233ab 100755
--- a/drivers/filesystems/cdfs_new/cddata.c
+++ b/drivers/filesystems/cdfs_new/cddata.c
@@ -259,7 +259,7 @@ Return Value:
// Use a try-except to handle the exception cases.
//
- try {
+ _SEH2_TRY {
//
// If the IrpContext is NULL then this is the first pass through
@@ -398,10 +398,10 @@ Return Value:
CdCompleteRequest( IrpContext, Irp, Status );
}
- } except( CdExceptionFilter( IrpContext, GetExceptionInformation() )) {
+ } _SEH2_EXCEPT( CdExceptionFilter( IrpContext, _SEH2_GetExceptionInformation() ))
{
- Status = CdProcessException( IrpContext, Irp, GetExceptionCode() );
- }
+ Status = CdProcessException( IrpContext, Irp, _SEH2_GetExceptionCode() );
+ } _SEH2_END;
} while (Status == STATUS_CANT_WAIT);
@@ -653,7 +653,7 @@ Return Value:
// Note that (children of) CdFsdPostRequest can raise (Mdl allocation).
//
- try {
+ _SEH2_TRY {
if (ExceptionCode == STATUS_CANT_WAIT) {
@@ -670,10 +670,10 @@ Return Value:
}
}
}
- except( CdExceptionFilter( IrpContext, GetExceptionInformation() )) {
+ _SEH2_EXCEPT( CdExceptionFilter( IrpContext, _SEH2_GetExceptionInformation() )) {
- ExceptionCode = GetExceptionCode();
- }
+ ExceptionCode = _SEH2_GetExceptionCode();
+ } _SEH2_END;
//
// If we posted the request or our caller will retry then just return here.
diff --git a/drivers/filesystems/cdfs_new/cdprocs.h
b/drivers/filesystems/cdfs_new/cdprocs.h
index 921f523720..2b066e7192 100755
--- a/drivers/filesystems/cdfs_new/cdprocs.h
+++ b/drivers/filesystems/cdfs_new/cdprocs.h
@@ -22,6 +22,9 @@ Abstract:
#include <ntddcdrm.h>
#include <ntdddisk.h>
#include <ntddscsi.h>
+#ifdef __REACTOS__
+#include <pseh/pseh2.h>
+#endif
#ifndef INLINE
#define INLINE __inline
@@ -1881,16 +1884,14 @@ CdCommonPnp ( // Implemented in
Pnp.c
//
// #define try_return(S) { S; goto try_exit; }
//
-/* ReactOS Change: Remove SEH */
-#define try
-#define leave goto exitLabel;
-#define finally if (0) goto exitLabel; exitLabel:
-#define except(x) while (0)
-#define GetExceptionCode() 0
-#define AbnormalTermination() 0
+#ifndef __REACTOS__
#define try_return(S) { S; goto try_exit; }
#define try_leave(S) { S; leave; }
+#else
+#define try_return(S) { S; goto try_exit; }
+#define try_leave(S) { S; _SEH2_LEAVE; }
+#endif
//
diff --git a/drivers/filesystems/cdfs_new/cleanup.c
b/drivers/filesystems/cdfs_new/cleanup.c
index 4c621e5c2f..a89be2ffef 100755
--- a/drivers/filesystems/cdfs_new/cleanup.c
+++ b/drivers/filesystems/cdfs_new/cleanup.c
@@ -159,7 +159,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- //try { /* ReactOS Change: Manual removal of SEH since macros to hack around it
don't allow multiple SEH usage within one function */
+ _SEH2_TRY {
//
// Case on the type of open that we are trying to cleanup.
@@ -279,7 +279,7 @@ Return Value:
IoRemoveShareAccess( FileObject, &Fcb->ShareAccess );
- //} finally { /* ReactOS Change: Manual removal of SEH since macros to hack around it
don't allow multiple SEH usage within one function */
+ } _SEH2_FINALLY {
CdReleaseFcb( IrpContext, Fcb );
@@ -287,7 +287,7 @@ Return Value:
FsRtlNotifyVolumeEvent( FileObject, FSRTL_VOLUME_UNLOCK );
}
- //} /* ReactOS Change: Manual removal of SEH since macros to hack around it don't
allow multiple SEH usage within one function */
+ } _SEH2_END;
//
// If appropriate, try to spark teardown by purging the volume. Should
@@ -305,19 +305,19 @@ Return Value:
CdAcquireCdData( IrpContext);
- try {
+ _SEH2_TRY {
CdAcquireVcbExclusive( IrpContext, Vcb, FALSE );
VcbAcquired = TRUE;
CdPurgeVolume( IrpContext, Vcb, FALSE );
- } finally {
+ } _SEH2_FINALLY {
if (VcbAcquired) { CdReleaseVcb( IrpContext, Vcb ); }
CdReleaseCdData( IrpContext);
- }
+ } _SEH2_END;
}
//
diff --git a/drivers/filesystems/cdfs_new/create.c
b/drivers/filesystems/cdfs_new/create.c
index bb072da107..3cab9b9ff9 100755
--- a/drivers/filesystems/cdfs_new/create.c
+++ b/drivers/filesystems/cdfs_new/create.c
@@ -357,7 +357,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Verify that the Vcb is not in an unusable condition. This routine
@@ -901,7 +901,7 @@ Return Value:
RelatedCcb ));
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
//
// Cleanup the PathEntry if initialized.
@@ -926,7 +926,7 @@ Return Value:
// condition.
//
- if (AbnormalTermination()) {
+ if (_SEH2_AbnormalTermination()) {
//
@@ -985,7 +985,7 @@ Return Value:
//
CdCompleteRequest( IrpContext, Irp, Status );
- }
+ } _SEH2_END;
return Status;
}
@@ -1512,7 +1512,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Go ahead and figure out the TypeOfOpen and NodeType. We can
@@ -1905,7 +1905,7 @@ Return Value:
}
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
if (UnlockVcb) {
@@ -1921,7 +1921,7 @@ Return Value:
CdCleanupCompoundPathEntry( IrpContext, &CompoundPathEntry );
}
- }
+ } _SEH2_END;
return Status;
}
@@ -2126,7 +2126,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Check the related Ccb to see if this was an OpenByFileId.
@@ -2281,7 +2281,7 @@ Return Value:
IrpSp->Parameters.Create.SecurityContext->DesiredAccess );
}
- } finally {
+ } _SEH2_FINALLY {
//
// Unlock the Vcb if held.
@@ -2300,7 +2300,7 @@ Return Value:
CdReleaseFcb( IrpContext, ParentFcb );
}
- }
+ } _SEH2_END;
return Status;
}
@@ -2399,7 +2399,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Check if a version number was used to open this file.
@@ -2569,7 +2569,7 @@ Return Value:
CcbFlags,
IrpSp->Parameters.Create.SecurityContext->DesiredAccess );
- } finally {
+ } _SEH2_FINALLY {
//
// Unlock the Vcb if held.
@@ -2588,7 +2588,7 @@ Return Value:
CdReleaseFcb( IrpContext, ParentFcb );
}
- }
+ } _SEH2_END;
return Status;
}
diff --git a/drivers/filesystems/cdfs_new/deviosup.c
b/drivers/filesystems/cdfs_new/deviosup.c
index 0c5c9d2bff..c12f1aa521 100755
--- a/drivers/filesystems/cdfs_new/deviosup.c
+++ b/drivers/filesystems/cdfs_new/deviosup.c
@@ -355,7 +355,7 @@ Return Value:
// Use a try-finally to perform the final cleanup.
//
- try {
+ _SEH2_TRY {
//
// Loop while there are more bytes to transfer.
@@ -518,7 +518,7 @@ Return Value:
}
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
//
// Perform final cleanup on the IoRuns if necessary.
@@ -528,7 +528,7 @@ Return Value:
CdFinishBuffers( IrpContext, IoRuns, CleanupRunCount, TRUE, FALSE );
}
- }
+ } _SEH2_END;
return Status;
}
@@ -624,7 +624,7 @@ Return Value:
// Use a try-finally to perform the final cleanup.
//
- try {
+ _SEH2_TRY {
//
// If the initial offset lies within the RIFF header then copy the
@@ -960,7 +960,7 @@ Return Value:
KeFlushIoBuffers( IrpContext->Irp->MdlAddress, TRUE, FALSE );
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
//
// Perform final cleanup on the IoRuns if necessary.
@@ -970,7 +970,7 @@ Return Value:
CdFinishBuffers( IrpContext, IoRuns, CleanupRunCount, TRUE, FALSE );
}
- }
+ } _SEH2_END;
return Status;
}
@@ -1176,15 +1176,15 @@ Return Value:
// deallocate the Mdl and return the appropriate "expected" status.
//
- try {
+ _SEH2_TRY {
MmProbeAndLockPages( Mdl, IrpContext->Irp->RequestorMode, IoWriteAccess
);
Status = STATUS_SUCCESS;
- } except(EXCEPTION_EXECUTE_HANDLER) {
+ } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
- Status = GetExceptionCode();
+ Status = _SEH2_GetExceptionCode();
IoFreeMdl( Mdl );
IrpContext->Irp->MdlAddress = NULL;
@@ -1193,7 +1193,7 @@ Return Value:
Status = STATUS_INVALID_USER_BUFFER;
}
- }
+ } _SEH2_END;
}
//
diff --git a/drivers/filesystems/cdfs_new/dirctrl.c
b/drivers/filesystems/cdfs_new/dirctrl.c
index 29265a844a..28cf0d51ea 100755
--- a/drivers/filesystems/cdfs_new/dirctrl.c
+++ b/drivers/filesystems/cdfs_new/dirctrl.c
@@ -287,7 +287,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Verify the Fcb is still good.
@@ -499,7 +499,7 @@ Return Value:
// such trickery.
//
- try {
+ _SEH2_TRY {
//
// Zero and initialize the base part of the current entry.
@@ -715,7 +715,7 @@ Return Value:
LastEntry = NextEntry;
NextEntry = QuadAlign( Information );
- } except (EXCEPTION_EXECUTE_HANDLER) {
+ } _SEH2_EXCEPT (EXCEPTION_EXECUTE_HANDLER) {
//
// We had a problem filling in the user's buffer, so stop and
@@ -724,13 +724,13 @@ Return Value:
//
Information = 0;
- try_leave( Status = GetExceptionCode());
- }
+ try_leave( Status = _SEH2_GetExceptionCode());
+ } _SEH2_END;
}
DoCcbUpdate = TRUE;
- } finally {
+ } _SEH2_FINALLY {
//
// Cleanup our search context - *before* acquiring the FCB mutex exclusive,
@@ -769,7 +769,7 @@ Return Value:
//
CdReleaseFile( IrpContext, Fcb );
- }
+ } _SEH2_END;
//
// Complete the request here.
@@ -837,7 +837,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Verify the Vcb.
@@ -862,14 +862,14 @@ Return Value:
NULL,
NULL );
- } finally {
+ } _SEH2_FINALLY {
//
// Release the Vcb.
//
CdReleaseVcb( IrpContext, IrpContext->Vcb );
- }
+ } _SEH2_END;
//
// Cleanup the IrpContext.
diff --git a/drivers/filesystems/cdfs_new/fileinfo.c
b/drivers/filesystems/cdfs_new/fileinfo.c
index b4a185a98a..ca2205869d 100755
--- a/drivers/filesystems/cdfs_new/fileinfo.c
+++ b/drivers/filesystems/cdfs_new/fileinfo.c
@@ -165,7 +165,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// We only support query on file and directory handles.
@@ -325,7 +325,7 @@ Return Value:
Irp->IoStatus.Information = IrpSp->Parameters.QueryFile.Length - Length;
- } finally {
+ } _SEH2_FINALLY {
//
// Release the file.
@@ -335,7 +335,7 @@ Return Value:
CdReleaseFile( IrpContext, Fcb );
}
- }
+ } _SEH2_END;
//
// Complete the request if we didn't raise.
@@ -406,7 +406,7 @@ Return Value:
CdAcquireFileShared( IrpContext, Fcb );
- try {
+ _SEH2_TRY {
//
// Make sure the Fcb is in a usable condition. This
@@ -445,10 +445,10 @@ Return Value:
Status = STATUS_SUCCESS;
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
CdReleaseFile( IrpContext, Fcb );
- }
+ } _SEH2_END;
//
// Complete the request if there was no raise.
@@ -536,7 +536,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Only deal with 'good' Fcb's.
@@ -566,12 +566,12 @@ Return Value:
Result = TRUE;
}
- } finally {
+ } _SEH2_FINALLY {
ExReleaseResourceLite( Fcb->Resource );
FsRtlExitFileSystem();
- }
+ } _SEH2_END;
return Result;
}
@@ -654,7 +654,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Only deal with 'good' Fcb's.
@@ -694,12 +694,12 @@ Return Value:
Result = TRUE;
}
- } finally {
+ } _SEH2_FINALLY {
ExReleaseResourceLite( Fcb->Resource );
FsRtlExitFileSystem();
- }
+ } _SEH2_END;
return Result;
}
@@ -782,7 +782,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Only deal with 'good' Fcb's.
@@ -827,12 +827,12 @@ Return Value:
Result = TRUE;
}
- } finally {
+ } _SEH2_FINALLY {
ExReleaseResourceLite( Fcb->Resource );
FsRtlExitFileSystem();
- }
+ } _SEH2_END;
return Result;
}
@@ -1278,7 +1278,7 @@ Return Value:
// Use a try-finally to cleanup the structures.
//
- try {
+ _SEH2_TRY {
ParentFcb = Fcb->ParentFcb;
CdAcquireFileShared( IrpContext, ParentFcb );
@@ -1396,7 +1396,7 @@ Return Value:
RtlCopyMemory( Buffer->FileName, ShortNameBuffer, Buffer->FileNameLength
);
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
if (CleanupFileLookup) {
@@ -1413,7 +1413,7 @@ Return Value:
CdReleaseFile( IrpContext, ParentFcb );
}
- }
+ } _SEH2_END;
//
// Reduce the available bytes by the amount stored into this buffer.
diff --git a/drivers/filesystems/cdfs_new/fsctrl.c
b/drivers/filesystems/cdfs_new/fsctrl.c
index 74b6c63839..cfa3e8b8ac 100755
--- a/drivers/filesystems/cdfs_new/fsctrl.c
+++ b/drivers/filesystems/cdfs_new/fsctrl.c
@@ -723,7 +723,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Allocate a buffer to query the TOC.
@@ -1058,7 +1058,7 @@ Return Value:
Status = STATUS_SUCCESS;
- } finally {
+ } _SEH2_FINALLY {
//
// Free the TOC buffer if not in the Vcb.
@@ -1082,7 +1082,7 @@ Return Value:
// If we are not mounting the device, then set the verify bit again.
//
- if ((AbnormalTermination() || (Status != STATUS_SUCCESS)) &&
+ if ((_SEH2_AbnormalTermination() || (Status != STATUS_SUCCESS)) &&
SetDoVerifyOnFail) {
CdMarkRealDevForVerify( IrpContext->RealDevice);
@@ -1119,7 +1119,7 @@ Return Value:
//
CdReleaseCdData( IrpContext );
- }
+ } _SEH2_END;
//
// Now send mount notification.
@@ -1221,7 +1221,7 @@ Return Value:
CdAcquireCdData( IrpContext );
- try {
+ _SEH2_TRY {
CdAcquireVcbExclusive( IrpContext, Vcb, FALSE );
ReleaseVcb = TRUE;
@@ -1545,7 +1545,7 @@ Return Value:
}
}
- } finally {
+ } _SEH2_FINALLY {
//
// Free the TOC buffer if allocated.
@@ -1567,7 +1567,7 @@ Return Value:
}
CdReleaseCdData( IrpContext );
- }
+ } _SEH2_END;
//
// Now send mount notification.
@@ -1692,7 +1692,7 @@ Return Value:
// Use a try finally to free the Fcb.
//
- try {
+ _SEH2_TRY {
//
// Verify the Fcb.
@@ -1722,14 +1722,14 @@ Return Value:
Irp = NULL;
- } finally {
+ } _SEH2_FINALLY {
//
// Release all of our resources
//
CdReleaseFcb( IrpContext, Fcb );
- }
+ } _SEH2_END;
//
// Complete the request if there was no exception.
@@ -1804,7 +1804,7 @@ Return Value:
Vcb = Fcb->Vcb;
CdAcquireVcbExclusive( IrpContext, Vcb, FALSE );
- try {
+ _SEH2_TRY {
//
// Verify the Vcb.
@@ -1814,7 +1814,7 @@ Return Value:
Status = CdLockVolumeInternal( IrpContext, Vcb, IrpSp->FileObject );
- } finally {
+ } _SEH2_FINALLY {
//
// Release the Vcb.
@@ -1822,11 +1822,11 @@ Return Value:
CdReleaseVcb( IrpContext, Vcb );
- if (AbnormalTermination() || !NT_SUCCESS( Status )) {
+ if (_SEH2_AbnormalTermination() || !NT_SUCCESS( Status )) {
FsRtlNotifyVolumeEvent( IrpSp->FileObject, FSRTL_VOLUME_LOCK_FAILED );
}
- }
+ } _SEH2_END;
//
// Complete the request if there haven't been any exceptions.
@@ -2635,7 +2635,7 @@ Return Value:
// Check for whether this device supports XA and multi-session.
//
- try {
+ _SEH2_TRY {
//
// Allocate a buffer for the last session information.
@@ -2713,10 +2713,10 @@ Return Value:
ThisPass += 1;
}
- } finally {
+ } _SEH2_FINALLY {
if (CdromToc != NULL) { CdFreePool( &CdromToc ); }
- }
+ } _SEH2_END;
}
//
diff --git a/drivers/filesystems/cdfs_new/fspdisp.c
b/drivers/filesystems/cdfs_new/fspdisp.c
index a3b89b96cf..da685e2203 100755
--- a/drivers/filesystems/cdfs_new/fspdisp.c
+++ b/drivers/filesystems/cdfs_new/fspdisp.c
@@ -94,7 +94,7 @@ Return Value:
while (TRUE) {
- try {
+ _SEH2_TRY {
//
// Reinitialize for the next try at completing this
@@ -184,10 +184,10 @@ Return Value:
CdCompleteRequest( IrpContext, Irp, Status );
}
- } except( CdExceptionFilter( IrpContext, GetExceptionInformation() )) {
+ } _SEH2_EXCEPT( CdExceptionFilter( IrpContext,
_SEH2_GetExceptionInformation() )) {
- Status = CdProcessException( IrpContext, Irp, GetExceptionCode() );
- }
+ Status = CdProcessException( IrpContext, Irp, _SEH2_GetExceptionCode()
);
+ } _SEH2_END;
//
// Break out of the loop if we didn't get CANT_WAIT.
diff --git a/drivers/filesystems/cdfs_new/lockctrl.c
b/drivers/filesystems/cdfs_new/lockctrl.c
index 149d4ecb5c..961c3be6e9 100755
--- a/drivers/filesystems/cdfs_new/lockctrl.c
+++ b/drivers/filesystems/cdfs_new/lockctrl.c
@@ -224,7 +224,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// We check whether we can proceed based on the state of the file oplocks.
@@ -275,10 +275,10 @@ Return Value:
}
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
FsRtlExitFileSystem();
- }
+ } _SEH2_END;
return Results;
}
@@ -366,7 +366,7 @@ Return Value:
FsRtlEnterFileSystem();
- try {
+ _SEH2_TRY {
//
// We check whether we can proceed based on the state of the file oplocks.
@@ -416,10 +416,10 @@ Return Value:
}
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
FsRtlExitFileSystem();
- }
+ } _SEH2_END;
return Results;
}
@@ -498,7 +498,7 @@ Return Value:
FsRtlEnterFileSystem();
- try {
+ _SEH2_TRY {
//
// We check whether we can proceed based on the state of the file oplocks.
@@ -539,10 +539,10 @@ Return Value:
CdUnlockFcb( IrpContext, Fcb );
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
FsRtlExitFileSystem();
- }
+ } _SEH2_END;
return Results;
}
@@ -624,7 +624,7 @@ Return Value:
FsRtlEnterFileSystem();
- try {
+ _SEH2_TRY {
//
// We check whether we can proceed based on the state of the file oplocks.
@@ -666,10 +666,10 @@ Return Value:
CdUnlockFcb( IrpContext, Fcb );
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
FsRtlExitFileSystem();
- }
+ } _SEH2_END;
return Results;
}
diff --git a/drivers/filesystems/cdfs_new/read.c b/drivers/filesystems/cdfs_new/read.c
index cadf3c464f..b32b13b824 100755
--- a/drivers/filesystems/cdfs_new/read.c
+++ b/drivers/filesystems/cdfs_new/read.c
@@ -35,11 +35,11 @@ Abstract:
//
#define SafeZeroMemory(IC,AT,BYTE_COUNT) { \
- try { \
+ _SEH2_TRY { \
RtlZeroMemory( (AT), (BYTE_COUNT) ); \
- } except( EXCEPTION_EXECUTE_HANDLER ) { \
+ } _SEH2_EXCEPT( EXCEPTION_EXECUTE_HANDLER ) { \
CdRaiseStatus( IC, STATUS_INVALID_USER_BUFFER ); \
- } \
+ } _SEH2_END; \
}
//
@@ -180,7 +180,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Verify the Fcb. Allow reads if this is a DASD handle that is
@@ -515,7 +515,7 @@ Return Value:
}
try_exit: NOTHING;
- } finally {
+ } _SEH2_FINALLY {
//
// Release the Fcb.
@@ -525,7 +525,7 @@ Return Value:
CdReleaseFile( IrpContext, Fcb );
}
- }
+ } _SEH2_END;
//
// Post the request if we got CANT_WAIT.
diff --git a/drivers/filesystems/cdfs_new/strucsup.c
b/drivers/filesystems/cdfs_new/strucsup.c
index 3439b73000..7ab3b2a0e7 100755
--- a/drivers/filesystems/cdfs_new/strucsup.c
+++ b/drivers/filesystems/cdfs_new/strucsup.c
@@ -298,19 +298,19 @@ Return Value:
// uninitialize the notify structures before returning.
//
- try {
+ _SEH2_TRY {
Vcb->SwapVpb = FsRtlAllocatePoolWithTag( NonPagedPool,
sizeof( VPB ),
TAG_VPB );
}
- finally {
+ _SEH2_FINALLY {
- if (AbnormalTermination()) {
+ if (_SEH2_AbnormalTermination()) {
FsRtlNotifyUninitializeSync( &Vcb->NotifySync );
}
- }
+ } _SEH2_END;
//
// Nothing beyond this point should raise.
@@ -456,7 +456,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Copy the block size and compute the various block masks.
@@ -843,10 +843,10 @@ Return Value:
SetFlag( Vcb->VcbState, VCB_STATE_ISO );
}
- } finally {
+ } _SEH2_FINALLY {
if (UnlockVcb) { CdUnlockVcb( IrpContext, Vcb ); }
- }
+ } _SEH2_END;
}
@@ -1238,7 +1238,7 @@ Return Value:
CdLockFcb( IrpContext, Fcb );
- try {
+ _SEH2_TRY {
//
// Initialize the common header in the Fcb. The node type is already
@@ -1361,10 +1361,10 @@ Return Value:
CdInsertFcbTable( IrpContext, Fcb );
SetFlag( Fcb->FcbState, FCB_STATE_IN_FCB_TABLE );
- } finally {
+ } _SEH2_FINALLY {
CdUnlockFcb( IrpContext, Fcb );
- }
+ } _SEH2_END;
return;
}
@@ -1937,7 +1937,7 @@ Return Value:
// Use a try-finally to safely clear the top-level field.
//
- try {
+ _SEH2_TRY {
//
// Loop until we find an Fcb we can't remove.
@@ -2041,7 +2041,7 @@ Return Value:
} while (CurrentFcb != NULL);
- } finally {
+ } _SEH2_FINALLY {
//
// Release the current Fcb if we have acquired it.
@@ -2057,7 +2057,7 @@ Return Value:
//
ClearFlag( IrpContext->TopLevel->Flags, IRP_CONTEXT_FLAG_IN_TEARDOWN );
- }
+ } _SEH2_END;
*RemovedStartingFcb = (CurrentFcb != StartingFcb);
return;
diff --git a/drivers/filesystems/cdfs_new/verfysup.c
b/drivers/filesystems/cdfs_new/verfysup.c
index 24c671afc2..fc130d872b 100755
--- a/drivers/filesystems/cdfs_new/verfysup.c
+++ b/drivers/filesystems/cdfs_new/verfysup.c
@@ -92,7 +92,7 @@ Return Value:
Vcb = &CONTAINING_RECORD( IrpSp->DeviceObject,
VOLUME_DEVICE_OBJECT,
DeviceObject )->Vcb;
- try {
+ _SEH2_TRY {
//
// Send down the verify FSCTL. Note that this is sent to the
@@ -206,7 +206,7 @@ Return Value:
Status = CdFsdPostRequest( IrpContext, Irp );
}
- } except(CdExceptionFilter( IrpContext, GetExceptionInformation() )) {
+ } _SEH2_EXCEPT(CdExceptionFilter( IrpContext, _SEH2_GetExceptionInformation() )) {
//
// We had some trouble trying to perform the verify or raised
@@ -214,8 +214,8 @@ Return Value:
// the error status that we get back from the exception code.
//
- Status = CdProcessException( IrpContext, Irp, GetExceptionCode() );
- }
+ Status = CdProcessException( IrpContext, Irp, _SEH2_GetExceptionCode() );
+ } _SEH2_END;
return Status;
}
diff --git a/drivers/filesystems/cdfs_new/volinfo.c
b/drivers/filesystems/cdfs_new/volinfo.c
index d0962fb4b8..b215fe081b 100755
--- a/drivers/filesystems/cdfs_new/volinfo.c
+++ b/drivers/filesystems/cdfs_new/volinfo.c
@@ -130,7 +130,7 @@ Return Value:
// Use a try-finally to facilitate cleanup.
//
- try {
+ _SEH2_TRY {
//
// Verify the Vcb.
@@ -177,14 +177,14 @@ Return Value:
Irp->IoStatus.Information = IrpSp->Parameters.QueryVolume.Length - Length;
- } finally {
+ } _SEH2_FINALLY {
//
// Release the Vcb.
//
CdReleaseVcb( IrpContext, Fcb->Vcb );
- }
+ } _SEH2_END;
//
// Complete the request if we didn't raise.
diff --git a/drivers/filesystems/cdfs_new/wdk_wnet_to_ros.diff
b/drivers/filesystems/cdfs_new/wdk_wnet_to_ros.diff
index cc84eb55c2..f6144dd1d9 100644
--- a/drivers/filesystems/cdfs_new/wdk_wnet_to_ros.diff
+++ b/drivers/filesystems/cdfs_new/wdk_wnet_to_ros.diff
@@ -805,37 +805,6 @@ Index: drivers/filesystems/cdfs_new/lockctrl.c
CdFastUnlockAllByKey (
IN PFILE_OBJECT FileObject,
PVOID ProcessId,
-Index: drivers/filesystems/cdfs_new/cleanup.c
-===================================================================
---- drivers/filesystems/cdfs_new/cleanup.c (revision 34615)
-+++ drivers/filesystems/cdfs_new/cleanup.c (working copy)
-@@ -159,7 +159,7 @@
- // Use a try-finally to facilitate cleanup.
- //
-
-- try {
-+ //try { /* ReactOS Change: Manual removal of SEH since macros to hack around it
don't allow multiple SEH usage within one function */
-
- //
- // Case on the type of open that we are trying to cleanup.
-@@ -279,7 +279,7 @@
-
- IoRemoveShareAccess( FileObject, &Fcb->ShareAccess );
-
-- } finally {
-+ //} finally { /* ReactOS Change: Manual removal of SEH since macros to hack around
it don't allow multiple SEH usage within one function */
-
- CdReleaseFcb( IrpContext, Fcb );
-
-@@ -287,7 +287,7 @@
-
- FsRtlNotifyVolumeEvent( FileObject, FSRTL_VOLUME_UNLOCK );
- }
-- }
-+ //} /* ReactOS Change: Manual removal of SEH since macros to hack around it
don't allow multiple SEH usage within one function */
-
- //
- // If appropriate, try to spark teardown by purging the volume. Should
Index: drivers/filesystems/cdfs_new/strucsup.c
===================================================================
--- drivers/filesystems/cdfs_new/strucsup.c (revision 34615)