From: Thomas Faber Date: Thu, 14 Dec 2017 10:43:57 +0000 (+0100) Subject: [NTOS:KD] Pass PreviousMode down to KdpPrintString, since ExGetPreviousMode is not... X-Git-Tag: 0.4.9-dev~677 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7e8de26164861fc8f6dc09c92d2211ed925e981e;hp=7b95fcf93d5ec38edd442492ec66459175f81106 [NTOS:KD] Pass PreviousMode down to KdpPrintString, since ExGetPreviousMode is not accurate. CORE-14103 --- diff --git a/ntoskrnl/include/internal/kd.h b/ntoskrnl/include/internal/kd.h index 05179ea6d35..daad7538e18 100644 --- a/ntoskrnl/include/internal/kd.h +++ b/ntoskrnl/include/internal/kd.h @@ -194,7 +194,8 @@ ULONG NTAPI KdpPrintString( _In_reads_bytes_(Length) PCHAR UnsafeString, - _In_ ULONG Length); + _In_ ULONG Length, + _In_ KPROCESSOR_MODE PreviousMode); ULONG NTAPI diff --git a/ntoskrnl/kd/kdio.c b/ntoskrnl/kd/kdio.c index 50e4d8168f2..53c99c43d47 100644 --- a/ntoskrnl/kd/kdio.c +++ b/ntoskrnl/kd/kdio.c @@ -569,7 +569,8 @@ ULONG NTAPI KdpPrintString( _In_reads_bytes_(Length) PCHAR UnsafeString, - _In_ ULONG Length) + _In_ ULONG Length, + _In_ KPROCESSOR_MODE PreviousMode) { PLIST_ENTRY CurrentEntry; PKD_DISPATCH_TABLE CurrentTable; @@ -580,7 +581,7 @@ KdpPrintString( Length = min(Length, sizeof(StringBuffer)); - if (ExGetPreviousMode() != KernelMode) + if (PreviousMode != KernelMode) { _SEH2_TRY { diff --git a/ntoskrnl/kd/kdmain.c b/ntoskrnl/kd/kdmain.c index 52b8babbcea..d219f1bb04a 100644 --- a/ntoskrnl/kd/kdmain.c +++ b/ntoskrnl/kd/kdmain.c @@ -41,14 +41,15 @@ ULONG NTAPI KdpServiceDispatcher(ULONG Service, PVOID Buffer1, - ULONG Buffer1Length) + ULONG Buffer1Length, + KPROCESSOR_MODE PreviousMode) { ULONG Result = 0; switch (Service) { case BREAKPOINT_PRINT: /* DbgPrint */ - Result = KdpPrintString(Buffer1, Buffer1Length); + Result = KdpPrintString(Buffer1, Buffer1Length, PreviousMode); break; #if DBG @@ -145,7 +146,8 @@ KdpEnterDebuggerException(IN PKTRAP_FRAME TrapFrame, /* Print the string */ KdpServiceDispatcher(BREAKPOINT_PRINT, (PVOID)ExceptionRecord->ExceptionInformation[1], - ExceptionRecord->ExceptionInformation[2]); + ExceptionRecord->ExceptionInformation[2], + PreviousMode); /* Return success */ KeSetContextReturnRegister(Context, STATUS_SUCCESS); @@ -493,7 +495,10 @@ KdSystemDebugControl(IN SYSDBG_COMMAND Command, IN KPROCESSOR_MODE PreviousMode) { /* HACK */ - return KdpServiceDispatcher(Command, InputBuffer, InputBufferLength); + return KdpServiceDispatcher(Command, + InputBuffer, + InputBufferLength, + PreviousMode); } PKDEBUG_ROUTINE KiDebugRoutine = KdpEnterDebuggerException;