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(a)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=34…
==============================================================================
--- 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);