[NTOS:KD] Pass PreviousMode down to KdpPrintString, since ExGetPreviousMode is not accurate. CORE-14103

This commit is contained in:
Thomas Faber 2017-12-14 11:43:57 +01:00
parent 7b95fcf93d
commit 7e8de26164
No known key found for this signature in database
GPG key ID: 076E7C3D44720826
3 changed files with 14 additions and 7 deletions

View file

@ -194,7 +194,8 @@ ULONG
NTAPI NTAPI
KdpPrintString( KdpPrintString(
_In_reads_bytes_(Length) PCHAR UnsafeString, _In_reads_bytes_(Length) PCHAR UnsafeString,
_In_ ULONG Length); _In_ ULONG Length,
_In_ KPROCESSOR_MODE PreviousMode);
ULONG ULONG
NTAPI NTAPI

View file

@ -569,7 +569,8 @@ ULONG
NTAPI NTAPI
KdpPrintString( KdpPrintString(
_In_reads_bytes_(Length) PCHAR UnsafeString, _In_reads_bytes_(Length) PCHAR UnsafeString,
_In_ ULONG Length) _In_ ULONG Length,
_In_ KPROCESSOR_MODE PreviousMode)
{ {
PLIST_ENTRY CurrentEntry; PLIST_ENTRY CurrentEntry;
PKD_DISPATCH_TABLE CurrentTable; PKD_DISPATCH_TABLE CurrentTable;
@ -580,7 +581,7 @@ KdpPrintString(
Length = min(Length, sizeof(StringBuffer)); Length = min(Length, sizeof(StringBuffer));
if (ExGetPreviousMode() != KernelMode) if (PreviousMode != KernelMode)
{ {
_SEH2_TRY _SEH2_TRY
{ {

View file

@ -41,14 +41,15 @@ ULONG
NTAPI NTAPI
KdpServiceDispatcher(ULONG Service, KdpServiceDispatcher(ULONG Service,
PVOID Buffer1, PVOID Buffer1,
ULONG Buffer1Length) ULONG Buffer1Length,
KPROCESSOR_MODE PreviousMode)
{ {
ULONG Result = 0; ULONG Result = 0;
switch (Service) switch (Service)
{ {
case BREAKPOINT_PRINT: /* DbgPrint */ case BREAKPOINT_PRINT: /* DbgPrint */
Result = KdpPrintString(Buffer1, Buffer1Length); Result = KdpPrintString(Buffer1, Buffer1Length, PreviousMode);
break; break;
#if DBG #if DBG
@ -145,7 +146,8 @@ KdpEnterDebuggerException(IN PKTRAP_FRAME TrapFrame,
/* Print the string */ /* Print the string */
KdpServiceDispatcher(BREAKPOINT_PRINT, KdpServiceDispatcher(BREAKPOINT_PRINT,
(PVOID)ExceptionRecord->ExceptionInformation[1], (PVOID)ExceptionRecord->ExceptionInformation[1],
ExceptionRecord->ExceptionInformation[2]); ExceptionRecord->ExceptionInformation[2],
PreviousMode);
/* Return success */ /* Return success */
KeSetContextReturnRegister(Context, STATUS_SUCCESS); KeSetContextReturnRegister(Context, STATUS_SUCCESS);
@ -493,7 +495,10 @@ KdSystemDebugControl(IN SYSDBG_COMMAND Command,
IN KPROCESSOR_MODE PreviousMode) IN KPROCESSOR_MODE PreviousMode)
{ {
/* HACK */ /* HACK */
return KdpServiceDispatcher(Command, InputBuffer, InputBufferLength); return KdpServiceDispatcher(Command,
InputBuffer,
InputBufferLength,
PreviousMode);
} }
PKDEBUG_ROUTINE KiDebugRoutine = KdpEnterDebuggerException; PKDEBUG_ROUTINE KiDebugRoutine = KdpEnterDebuggerException;