[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
KdpPrintString(
_In_reads_bytes_(Length) PCHAR UnsafeString,
_In_ ULONG Length);
_In_ ULONG Length,
_In_ KPROCESSOR_MODE PreviousMode);
ULONG
NTAPI

View file

@ -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
{

View file

@ -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;