From 1c3ae3043ace813fd7d2cdb66ef31cdcc1ca61a9 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Sun, 14 Nov 2021 21:23:05 +0100 Subject: [PATCH] [0.4.7][UDFS] Fix crash on boot in release builds with UDFS removable media inserted (#4061) CORE-17598 Changes to specific files and their effects are as follows: create.cpp - Allows booting past second stage with UDFS media inserted without BSOD close.cpp - Allows shutdown without hang dircntrl.cpp - Allows New Hardware Wizard not to hang on initial third phase install It began to crash with the introduction of the UDFS driver in SVN r74901 == git 3a104c8f20b540cb057609c5035200409dc9d83a Fix picked from 0.4.15-dev-3326-g a91f5e8e4db2fc9af3d09175e537f16307db17f3 --- drivers/filesystems/udfs/close.cpp | 24 ++++++++++++------------ drivers/filesystems/udfs/create.cpp | 2 +- drivers/filesystems/udfs/dircntrl.cpp | 12 ++++++------ 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/drivers/filesystems/udfs/close.cpp b/drivers/filesystems/udfs/close.cpp index a75954e143c..7949a9bb9eb 100644 --- a/drivers/filesystems/udfs/close.cpp +++ b/drivers/filesystems/udfs/close.cpp @@ -921,18 +921,18 @@ UDFCloseAllXXXDelayedInDir( IN BOOLEAN System ) { - PUDF_FILE_INFO* PassedList = NULL; - ULONG PassedListSize = 0; - PUDF_FILE_INFO* FoundList = NULL; - ULONG FoundListSize = 0; - NTSTATUS RC; - ULONG i; - BOOLEAN ResAcq = FALSE; - BOOLEAN AcquiredVcb = FALSE; - UDFNTRequiredFCB* NtReqFcb; - PUDF_FILE_INFO CurFileInfo; - PFE_LIST_ENTRY CurListPtr; - PFE_LIST_ENTRY* ListPtrArray = NULL; + PUDF_FILE_INFO* PassedList = NULL; + ULONG PassedListSize = 0; + PUDF_FILE_INFO* FoundList = NULL; + ULONG FoundListSize = 0; + NTSTATUS RC; + ULONG i; + _SEH2_VOLATILE BOOLEAN ResAcq = FALSE; + _SEH2_VOLATILE BOOLEAN AcquiredVcb = FALSE; + UDFNTRequiredFCB* NtReqFcb; + PUDF_FILE_INFO CurFileInfo; + PFE_LIST_ENTRY CurListPtr; + PFE_LIST_ENTRY* ListPtrArray = NULL; _SEH2_TRY { diff --git a/drivers/filesystems/udfs/create.cpp b/drivers/filesystems/udfs/create.cpp index e841a04d03f..c28819549de 100644 --- a/drivers/filesystems/udfs/create.cpp +++ b/drivers/filesystems/udfs/create.cpp @@ -204,7 +204,7 @@ UDFCommonCreate( ACCESS_MASK DesiredAccess; PACCESS_STATE AccessState; - PVCB Vcb = NULL; + _SEH2_VOLATILE PVCB Vcb = NULL; _SEH2_VOLATILE BOOLEAN AcquiredVcb = FALSE; BOOLEAN OpenExisting = FALSE; PERESOURCE Res1 = NULL; diff --git a/drivers/filesystems/udfs/dircntrl.cpp b/drivers/filesystems/udfs/dircntrl.cpp index e99d22ad866..5829cc045a6 100644 --- a/drivers/filesystems/udfs/dircntrl.cpp +++ b/drivers/filesystems/udfs/dircntrl.cpp @@ -134,8 +134,8 @@ UDFCommonDirControl( PFILE_OBJECT FileObject = NULL; PtrUDFFCB Fcb = NULL; PtrUDFCCB Ccb = NULL; - PVCB Vcb = NULL; - BOOLEAN AcquiredVcb = FALSE; + _SEH2_VOLATILE PVCB Vcb = NULL; + _SEH2_VOLATILE BOOLEAN AcquiredVcb = FALSE; TmPrint(("UDFCommonDirControl: \n")); // BrutePoint(); @@ -226,8 +226,8 @@ UDFQueryDirectory( BOOLEAN PostRequest = FALSE; PtrUDFNTRequiredFCB NtReqFcb = NULL; BOOLEAN CanWait = FALSE; - PVCB Vcb = NULL; - BOOLEAN AcquiredFCB = FALSE; + _SEH2_VOLATILE PVCB Vcb = NULL; + _SEH2_VOLATILE BOOLEAN AcquiredFCB = FALSE; unsigned long BufferLength = 0; UNICODE_STRING SearchPattern; PUNICODE_STRING PtrSearchPattern; @@ -696,8 +696,8 @@ UDFNotifyChangeDirectory( BOOLEAN CanWait = FALSE; ULONG CompletionFilter = 0; BOOLEAN WatchTree = FALSE; - PVCB Vcb = NULL; - BOOLEAN AcquiredFCB = FALSE; + _SEH2_VOLATILE PVCB Vcb = NULL; + _SEH2_VOLATILE BOOLEAN AcquiredFCB = FALSE; PEXTENDED_IO_STACK_LOCATION pStackLocation = (PEXTENDED_IO_STACK_LOCATION) IrpSp; UDFPrint(("UDFNotifyChangeDirectory\n"));