mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 10:46:58 +00:00
[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:
parent
519620ce61
commit
f723d230a0
17 changed files with 138 additions and 168 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
//
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue