FrameCount = RtlCaptureStackBackTrace(2, 2, &BackTrace[0],BackTraceHash);
/* Only if user want it */
- if (*CallersAddress != NULL)
+ if (CallersAddress != NULL)
{
/* only when first frames exist */
if (FrameCount >= 1)
}
/* Only if user want it */
- if (*CallersCaller != NULL)
+ if (CallersCaller != NULL)
{
/* only when second frames exist */
if (FrameCount >= 2)
ULONG_PTR StackLow, StackHigh;
ULONG_PTR RegistrationFrameEnd;
- /* Perform vectored exception handling (a dummy in kernel mode) */
+ /* Perform vectored exception handling for user mode */
if (RtlCallVectoredExceptionHandlers(ExceptionRecord, Context))
{
- /* Exception handled, continue execution */
+ /* Exception handled, now call vectored continue handlers */
+ RtlCallVectoredContinueHandlers(ExceptionRecord, Context);
+
+ /* Continue execution */
return TRUE;
}
/* Handle the dispositions */
switch (Disposition)
{
- /* Continue searching */
+ /* Continue execution */
case ExceptionContinueExecution:
/* Check if it was non-continuable */
}
else
{
- /* Return to caller */
+ /* In user mode, call any registered vectored continue handlers */
+ RtlCallVectoredContinueHandlers(ExceptionRecord,
+ Context);
+
+ /* Execution continues */
return TRUE;
}