https://git.reactos.org/?p=reactos.git;a=commitdiff;h=412037a2e286585f36db22...
commit 412037a2e286585f36db223ed6523d8035cca2d3 Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Tue Mar 28 01:33:55 2023 +0200 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org CommitDate: Tue Mar 28 02:42:53 2023 +0200
[NTOS:KD] Use local print-like functions for output, instead of the kernel-internal KdpDprintf.
Indeed, the latter won't be accessible once those KD IO functions get moved out into a separate KDTERM.DLL. --- ntoskrnl/kd/kd.h | 16 +++++++-- ntoskrnl/kd/kdio.c | 87 ++++++++++++++++++++++++++++++++++++------------- ntoskrnl/kdbg/kdb_cli.c | 2 +- 3 files changed, 79 insertions(+), 26 deletions(-)
diff --git a/ntoskrnl/kd/kd.h b/ntoskrnl/kd/kd.h index 5672408d4c6..4440b183626 100644 --- a/ntoskrnl/kd/kd.h +++ b/ntoskrnl/kd/kd.h @@ -13,9 +13,19 @@ NTSTATUS typedef VOID (NTAPI *PKDP_PRINT_ROUTINE)( - PCHAR String, - ULONG Length -); + _In_ PCCH String, + _In_ ULONG Length); + +VOID +KdIoPuts( + _In_ PCSTR String); + +VOID +__cdecl +KdIoPrintf( + _In_ PCSTR Format, + ...); +
/* INIT ROUTINES *************************************************************/
diff --git a/ntoskrnl/kd/kdio.c b/ntoskrnl/kd/kdio.c index f74106049a7..c8087e991ae 100644 --- a/ntoskrnl/kd/kdio.c +++ b/ntoskrnl/kd/kdio.c @@ -151,8 +151,9 @@ KdpLoggerThread(PVOID Context)
static VOID NTAPI -KdpPrintToLogFile(PCHAR String, - ULONG Length) +KdpPrintToLogFile( + _In_ PCCH String, + _In_ ULONG Length) { KIRQL OldIrql; ULONG beg, end, num; @@ -359,10 +360,11 @@ Failure:
static VOID NTAPI -KdpSerialPrint(PCHAR String, - ULONG Length) +KdpSerialPrint( + _In_ PCCH String, + _In_ ULONG Length) { - PCHAR pch = String; + PCCH pch = String; KIRQL OldIrql;
/* Acquire the printing spinlock without waiting at raised IRQL */ @@ -376,7 +378,7 @@ KdpSerialPrint(PCHAR String, KdPortPutByteEx(&SerialPortInfo, '\r'); } KdPortPutByteEx(&SerialPortInfo, *pch); - pch++; + ++pch; }
/* Release the spinlock */ @@ -456,10 +458,11 @@ KdpScreenRelease(VOID)
static VOID NTAPI -KdpScreenPrint(PCHAR String, - ULONG Length) +KdpScreenPrint( + _In_ PCCH String, + _In_ ULONG Length) { - PCHAR pch = String; + PCCH pch = String;
while (pch < String + Length && *pch) { @@ -538,6 +541,57 @@ KdpScreenInit(
/* GENERAL FUNCTIONS *********************************************************/
+static VOID +KdIoPrintString( + _In_ PCCH String, + _In_ ULONG Length) +{ + PLIST_ENTRY CurrentEntry; + PKD_DISPATCH_TABLE CurrentTable; + + /* Call the registered providers */ + for (CurrentEntry = KdProviders.Flink; + CurrentEntry != &KdProviders; + CurrentEntry = CurrentEntry->Flink) + { + CurrentTable = CONTAINING_RECORD(CurrentEntry, + KD_DISPATCH_TABLE, + KdProvidersList); + + CurrentTable->KdpPrintRoutine(String, Length); + } +} + +VOID +KdIoPuts( + _In_ PCSTR String) +{ + KdIoPrintString(String, (ULONG)strlen(String)); +} + +VOID +__cdecl +KdIoPrintf( + _In_ PCSTR Format, + ...) +{ + va_list ap; + ULONG Length; + CHAR Buffer[512]; + + /* Format the string */ + va_start(ap, Format); + Length = (ULONG)_vsnprintf(Buffer, + sizeof(Buffer), + Format, + ap); + va_end(ap); + + /* Send it to the display providers */ + KdIoPrintString(Buffer, Length); +} + + extern STRING KdbPromptString;
VOID @@ -551,8 +605,6 @@ KdSendPacket( if (PacketType == PACKET_TYPE_KD_DEBUG_IO) { ULONG ApiNumber = ((PDBGKD_DEBUG_IO)MessageHeader->Buffer)->ApiNumber; - PLIST_ENTRY CurrentEntry; - PKD_DISPATCH_TABLE CurrentTable;
/* Validate API call */ if (MessageHeader->Length != sizeof(DBGKD_DEBUG_IO)) @@ -572,17 +624,8 @@ KdSendPacket( if (!KdpDebugMode.Value) return;
- /* Call the registered providers */ - for (CurrentEntry = KdProviders.Flink; - CurrentEntry != &KdProviders; - CurrentEntry = CurrentEntry->Flink) - { - CurrentTable = CONTAINING_RECORD(CurrentEntry, - KD_DISPATCH_TABLE, - KdProvidersList); - - CurrentTable->KdpPrintRoutine(MessageData->Buffer, MessageData->Length); - } + /* Print the string proper */ + KdIoPrintString(MessageData->Buffer, MessageData->Length); return; } else if (PacketType == PACKET_TYPE_KD_STATE_CHANGE64) diff --git a/ntoskrnl/kdbg/kdb_cli.c b/ntoskrnl/kdbg/kdb_cli.c index b50d18b692f..bbfca348fe2 100644 --- a/ntoskrnl/kdbg/kdb_cli.c +++ b/ntoskrnl/kdbg/kdb_cli.c @@ -3781,7 +3781,7 @@ KdbpCliInit(VOID) static VOID NTAPI KdbDebugPrint( - _In_ PCHAR String, + _In_ PCCH String, _In_ ULONG Length) { KIRQL OldIrql;