From 8cd2554cffe0a67fb95f8b467f7b228085daf4aa Mon Sep 17 00:00:00 2001 From: "KJK::Hyperion" Date: Mon, 20 Jun 2005 03:42:05 +0000 Subject: [PATCH] Converted kernel32 process creation to use PSEH (untested change to help Alex) svn path=/trunk/; revision=16130 --- reactos/lib/kernel32/process/create.c | 41 +++++++++------------------ 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/reactos/lib/kernel32/process/create.c b/reactos/lib/kernel32/process/create.c index d47f706a816..3802b423994 100644 --- a/reactos/lib/kernel32/process/create.c +++ b/reactos/lib/kernel32/process/create.c @@ -276,45 +276,25 @@ BOOL STDCALL CreateProcessA(LPCSTR lpApplicationName, } -static EXCEPTION_DISPOSITION __cdecl -_except_handler(EXCEPTION_RECORD *ExceptionRecord, - void * EstablisherFrame, - CONTEXT *ContextRecord, - void * DispatcherContext) +_SEH_FILTER(BaseExceptionFilter) { - EXCEPTION_POINTERS ExceptionInfo; - EXCEPTION_DISPOSITION ExceptionDisposition = EXCEPTION_EXECUTE_HANDLER; - - ExceptionInfo.ExceptionRecord = ExceptionRecord; - ExceptionInfo.ContextRecord = ContextRecord; + EXCEPTION_POINTERS * ExceptionInfo = _SEH_GetExceptionPointers(); + LONG ExceptionDisposition = EXCEPTION_EXECUTE_HANDLER; if (GlobalTopLevelExceptionFilter != NULL) { _SEH_TRY { - ExceptionDisposition = GlobalTopLevelExceptionFilter(&ExceptionInfo); + ExceptionDisposition = GlobalTopLevelExceptionFilter(ExceptionInfo); } _SEH_HANDLE { - ExceptionDisposition = UnhandledExceptionFilter(&ExceptionInfo); + ExceptionDisposition = UnhandledExceptionFilter(ExceptionInfo); } _SEH_END; } - if (ExceptionDisposition == EXCEPTION_EXECUTE_HANDLER) - ExitProcess(ExceptionRecord->ExceptionCode); - - /* translate EXCEPTION_XXX defines into EXCEPTION_DISPOSITION enum values */ - if (ExceptionDisposition == EXCEPTION_CONTINUE_EXECUTION) - { - return ExceptionContinueExecution; - } - else if (ExceptionDisposition == EXCEPTION_CONTINUE_SEARCH) - { - return ExceptionContinueSearch; - } - - return -1; /* unknown return from UnhandledExceptionFilter */ + return ExceptionDisposition; } @@ -326,10 +306,15 @@ BaseProcessStart(LPTHREAD_START_ROUTINE lpStartAddress, DPRINT("BaseProcessStart(..) - setting up exception frame.\n"); - __try1(_except_handler) + _SEH_TRY { uExitCode = (lpStartAddress)((PVOID)lpParameter); - } __except1 + } + _SEH_EXCEPT(BaseExceptionFilter) + { + uExitCode = _SEH_GetExceptionCode(); + } + _SEH_END; ExitProcess(uExitCode); }