Author: fireball Date: Tue Jul 8 16:17:47 2008 New Revision: 34377
URL: http://svn.reactos.org/svn/reactos?rev=34377&view=rev Log: Yuriy Sidorov jura@cp-lab.com - Always call ZwRaiseException in user mode and RtlDispatchException in kernel mode. - If RtlDispatchException failed call ZwRaiseException in kernel mode. Otherwise unhandled RtlRaiseException() call in kernel mode simply ignored (do nothing)! - Call RtlRaiseStatus in RtlRaiseException, if something went wrong. See issue #3434 for more details.
Modified: trunk/reactos/lib/rtl/exception.c
Modified: trunk/reactos/lib/rtl/exception.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/exception.c?rev=343... ============================================================================== --- trunk/reactos/lib/rtl/exception.c [iso-8859-1] (original) +++ trunk/reactos/lib/rtl/exception.c [iso-8859-1] Tue Jul 8 16:17:47 2008 @@ -41,8 +41,8 @@ /* Write the context flag */ Context.ContextFlags = CONTEXT_FULL;
- /* Check if we're being debugged (user-mode only) */ - if (!RtlpCheckForActiveDebugger(TRUE)) + /* Check mode */ + if (RtlpGetMode() == UserMode) { /* Raise an exception immediately */ Status = ZwRaiseException(ExceptionRecord, &Context, TRUE); @@ -50,7 +50,7 @@ else { /* Dispatch the exception and check if we should continue */ - if (RtlDispatchException(ExceptionRecord, &Context)) + if (!RtlDispatchException(ExceptionRecord, &Context)) { /* Raise the exception */ Status = ZwRaiseException(ExceptionRecord, &Context, FALSE); @@ -62,8 +62,8 @@ } }
- /* We should never return */ - while (TRUE); + /* If we returned, raise a status */ + RtlRaiseStatus(Status); }
/* @@ -94,8 +94,8 @@ /* Write the context flag */ Context.ContextFlags = CONTEXT_FULL;
- /* Check if we're being debugged (user-mode only) */ - if (!RtlpCheckForActiveDebugger(TRUE)) + /* Check mode */ + if (RtlpGetMode() == UserMode) { /* Raise an exception immediately */ ZwRaiseException(&ExceptionRecord, &Context, TRUE);