[CDFS_NEW] _SEH2_FINALLY implement SEH support for real instead of its current stub.

This notably fixes BSOD on media change
This commit is contained in:
Pierre Schweitzer 2017-11-17 22:18:53 +01:00
parent 519620ce61
commit f723d230a0
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B
17 changed files with 138 additions and 168 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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.

View file

@ -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
//

View file

@ -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;
}
//

View file

@ -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;
}

View file

@ -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;
}
//

View file

@ -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.

View file

@ -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.

View file

@ -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;
}
//

View file

@ -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.

View file

@ -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;
}

View file

@ -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.

View file

@ -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;

View file

@ -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;
}

View file

@ -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.

View 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)