diff --git a/reactos/ntoskrnl/include/internal/i386/ke.h b/reactos/ntoskrnl/include/internal/i386/ke.h index 64d876d864b..cfe674c3dec 100644 --- a/reactos/ntoskrnl/include/internal/i386/ke.h +++ b/reactos/ntoskrnl/include/internal/i386/ke.h @@ -504,6 +504,7 @@ VOID NTAPI KiDispatchExceptionFromTrapFrame( IN NTSTATUS Code, + IN ULONG Flags, IN ULONG_PTR Address, IN ULONG ParameterCount, IN ULONG_PTR Parameter1, @@ -623,7 +624,7 @@ KiDispatchException0Args(IN NTSTATUS Code, IN PKTRAP_FRAME TrapFrame) { /* Helper for exceptions with no arguments */ - KiDispatchExceptionFromTrapFrame(Code, Address, 0, 0, 0, 0, TrapFrame); + KiDispatchExceptionFromTrapFrame(Code, 0, Address, 0, 0, 0, 0, TrapFrame); } // @@ -638,7 +639,7 @@ KiDispatchException1Args(IN NTSTATUS Code, IN PKTRAP_FRAME TrapFrame) { /* Helper for exceptions with no arguments */ - KiDispatchExceptionFromTrapFrame(Code, Address, 1, P1, 0, 0, TrapFrame); + KiDispatchExceptionFromTrapFrame(Code, 0, Address, 1, P1, 0, 0, TrapFrame); } // @@ -654,7 +655,7 @@ KiDispatchException2Args(IN NTSTATUS Code, IN PKTRAP_FRAME TrapFrame) { /* Helper for exceptions with no arguments */ - KiDispatchExceptionFromTrapFrame(Code, Address, 2, P1, P2, 0, TrapFrame); + KiDispatchExceptionFromTrapFrame(Code, 0, Address, 2, P1, P2, 0, TrapFrame); } // diff --git a/reactos/ntoskrnl/ke/i386/exp.c b/reactos/ntoskrnl/ke/i386/exp.c index 976d2ebddc7..6d3151ffdc3 100644 --- a/reactos/ntoskrnl/ke/i386/exp.c +++ b/reactos/ntoskrnl/ke/i386/exp.c @@ -1097,6 +1097,7 @@ DECLSPEC_NORETURN VOID NTAPI KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code, + IN ULONG Flags, IN ULONG_PTR Address, IN ULONG ParameterCount, IN ULONG_PTR Parameter1, @@ -1108,7 +1109,7 @@ KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code, /* Build the exception record */ ExceptionRecord.ExceptionCode = Code; - ExceptionRecord.ExceptionFlags = 0; + ExceptionRecord.ExceptionFlags = Flags; ExceptionRecord.ExceptionRecord = NULL; ExceptionRecord.ExceptionAddress = (PVOID)Address; ExceptionRecord.NumberParameters = ParameterCount; diff --git a/reactos/ntoskrnl/ke/i386/traphdlr.c b/reactos/ntoskrnl/ke/i386/traphdlr.c index 80ab6374c91..571d88cecf9 100644 --- a/reactos/ntoskrnl/ke/i386/traphdlr.c +++ b/reactos/ntoskrnl/ke/i386/traphdlr.c @@ -223,6 +223,7 @@ KiDebugHandler(IN PKTRAP_FRAME TrapFrame, /* Dispatch the exception */ KiDispatchExceptionFromTrapFrame(STATUS_BREAKPOINT, + 0, TrapFrame->Eip - 1, 3, Parameter1, @@ -1311,6 +1312,7 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame) /* Only other choice is an in-page error, with 3 parameters */ KiDispatchExceptionFromTrapFrame(STATUS_IN_PAGE_ERROR, + 0, TrapFrame->Eip, 3, TrapFrame->ErrCode & 2 ? TRUE : FALSE, @@ -1474,10 +1476,14 @@ KiRaiseSecurityCheckFailureHandler(IN PKTRAP_FRAME TrapFrame) if (KiUserTrap(TrapFrame)) { /* Dispatch exception to user mode */ - KiDispatchException1Args(STATUS_STACK_BUFFER_OVERRUN, - TrapFrame->Eip, - TrapFrame->Ecx, - TrapFrame); + KiDispatchExceptionFromTrapFrame(STATUS_STACK_BUFFER_OVERRUN, + EXCEPTION_NONCONTINUABLE, + TrapFrame->Eip, + 1, + TrapFrame->Ecx, + 0, + 0, + TrapFrame); } else {