[NTOS:KD] Protect against invalid user arguments in KdpPrintString. CORE-14057
[reactos.git] / ntoskrnl / include / internal / kd.h
index 672234a..05179ea 100644 (file)
@@ -1,65 +1,33 @@
 #pragma once
 
-#ifdef _M_PPC
-#define KdDebuggerEnabled _KdDebuggerEnabled
-#define KdDebuggerNotPresent _KdDebuggerNotPresent
-#endif
+#include <cportlib/cportlib.h>
 
 //
 // Kernel Debugger Port Definition
 //
-typedef struct _KD_PORT_INFORMATION
-{
-    ULONG ComPort;
-    ULONG BaudRate;
-    ULONG BaseAddress;
-} KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
-
 struct _KD_DISPATCH_TABLE;
-extern KD_PORT_INFORMATION GdbPortInfo;
-extern BOOLEAN _KdDebuggerEnabled;
-extern BOOLEAN _KdDebuggerNotPresent;
+extern CPPORT GdbPortInfo;
 extern BOOLEAN KdBreakAfterSymbolLoad;
 extern BOOLEAN KdPitchDebugger;
 extern BOOLEAN KdIgnoreUmExceptions;
 
-BOOLEAN
-NTAPI
-KdPortInitialize(
-    PKD_PORT_INFORMATION PortInformation,
-    ULONG Unknown1,
-    ULONG Unknown2
-);
-
 BOOLEAN
 NTAPI
 KdPortInitializeEx(
-    PKD_PORT_INFORMATION PortInformation,
-    ULONG Unknown1,
-    ULONG Unknown2
+    PCPPORT PortInformation,
+    ULONG ComPortNumber
 );
 
-BOOLEAN
-NTAPI
-KdPortGetByte(
-    PUCHAR ByteRecieved);
-
 BOOLEAN
 NTAPI
 KdPortGetByteEx(
-    PKD_PORT_INFORMATION PortInformation,
-    PUCHAR ByteRecieved);
-
-VOID
-NTAPI
-KdPortPutByte(
-    UCHAR ByteToSend
-);
+    PCPPORT PortInformation,
+    PUCHAR ByteReceived);
 
 VOID
 NTAPI
 KdPortPutByteEx(
-    PKD_PORT_INFORMATION PortInformation,
+    PCPPORT PortInformation,
     UCHAR ByteToSend
 );
 
@@ -68,7 +36,7 @@ KdPortPutByteEx(
 
 #if defined(KDBG) || DBG
 
-#if KDBG
+#if defined(KDBG)
 typedef
 BOOLEAN
 (NTAPI *PKDBG_CLI_ROUTINE)(
@@ -99,7 +67,7 @@ KdbSymGetAddressInformation(
     IN PROSSYM_INFO  RosSymInfo,
     IN ULONG_PTR  RelativeAddress,
 #ifdef __ROS_DWARF__
-       IN PROSSYM_LINEINFO RosSymLineInfo
+    IN PROSSYM_LINEINFO RosSymLineInfo
 #else
     OUT PULONG LineNumber  OPTIONAL,
     OUT PCH FileName  OPTIONAL,
@@ -225,16 +193,17 @@ KdpCallGdb(
 ULONG
 NTAPI
 KdpPrintString(
-    LPSTR String,
-    ULONG Length);
+    _In_reads_bytes_(Length) PCHAR UnsafeString,
+    _In_ ULONG Length);
 
 ULONG
 NTAPI
 KdpPrompt(
-    IN LPSTR InString,
-    IN USHORT InStringLength,
-    OUT LPSTR OutString,
-    IN USHORT OutStringLength
+    _In_reads_bytes_(InStringLength) PCHAR UnsafeInString,
+    _In_ USHORT InStringLength,
+    _Out_writes_bytes_(OutStringLength) PCHAR UnsafeOutString,
+    _In_ USHORT OutStringLength,
+    _In_ KPROCESSOR_MODE PreviousMode
 );
 
 BOOLEAN
@@ -359,7 +328,8 @@ extern ULONG KdpPortIrq;
 extern ULONG KdpPort;
 
 /* Port Information for the Serial Native Mode */
-extern KD_PORT_INFORMATION SerialPortInfo;
+extern ULONG  SerialPortNumber;
+extern CPPORT SerialPortInfo;
 
 /* Init Functions for Native Providers */
 extern PKDP_INIT_ROUTINE InitRoutines[KdMax];
@@ -385,7 +355,7 @@ extern ULONG Kd_WIN2000_Mask;
 
 #endif
 
-#if DBG
+#if DBG && defined(_M_IX86) && !defined(_WINKD_) // See ke/i386/traphdlr.c
 #define ID_Win32PreServiceHook 'WSH0'
 #define ID_Win32PostServiceHook 'WSH1'
 typedef void (NTAPI *PKDBG_PRESERVICEHOOK)(ULONG, PULONG_PTR);