[CDFS_NEW] _SEH2_FINALLY implement SEH support for real instead of its current stub.
authorPierre Schweitzer <pierre@reactos.org>
Fri, 17 Nov 2017 21:18:53 +0000 (22:18 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Fri, 17 Nov 2017 21:20:13 +0000 (22:20 +0100)
This notably fixes BSOD on media change

17 files changed:
drivers/filesystems/cdfs_new/allocsup.c
drivers/filesystems/cdfs_new/cachesup.c
drivers/filesystems/cdfs_new/cddata.c
drivers/filesystems/cdfs_new/cdprocs.h
drivers/filesystems/cdfs_new/cleanup.c
drivers/filesystems/cdfs_new/create.c
drivers/filesystems/cdfs_new/deviosup.c
drivers/filesystems/cdfs_new/dirctrl.c
drivers/filesystems/cdfs_new/fileinfo.c
drivers/filesystems/cdfs_new/fsctrl.c
drivers/filesystems/cdfs_new/fspdisp.c
drivers/filesystems/cdfs_new/lockctrl.c
drivers/filesystems/cdfs_new/read.c
drivers/filesystems/cdfs_new/strucsup.c
drivers/filesystems/cdfs_new/verfysup.c
drivers/filesystems/cdfs_new/volinfo.c
drivers/filesystems/cdfs_new/wdk_wnet_to_ros.diff

index b875eca..93b35bc 100755 (executable)
@@ -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;
 }
index 87b75bb..600262f 100755 (executable)
@@ -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;
 }
index dbd572a..c836723 100755 (executable)
@@ -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.
index 921f523..2b066e7 100755 (executable)
@@ -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
 
 
 //
index 4c621e5..a89be2f 100755 (executable)
@@ -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;
     }
 
     //
index bb072da..3cab9b9 100755 (executable)
@@ -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;
 }
index 0c5c9d2..c12f1aa 100755 (executable)
@@ -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;
     }
 
     //
index 29265a8..28cf0d5 100755 (executable)
@@ -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.
index b4a185a..ca22058 100755 (executable)
@@ -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.
index 74b6c63..cfa3e8b 100755 (executable)
@@ -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;
         }
 
         //
index a3b89b9..da685e2 100755 (executable)
@@ -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.
index 149d4ec..961c3be 100755 (executable)
@@ -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;
 }
index cadf3c4..b32b13b 100755 (executable)
@@ -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.
index 3439b73..7ab3b2a 100755 (executable)
@@ -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;
 }
 
 \f
@@ -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;
index 24c671a..fc130d8 100755 (executable)
@@ -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;
 }
index d0962fb..b215fe0 100755 (executable)
@@ -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.
index cc84eb5..f6144dd 100644 (file)
@@ -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)