3 #include <cportlib/cportlib.h>
6 // Kernel Debugger Port Definition
8 struct _KD_DISPATCH_TABLE
;
9 extern CPPORT GdbPortInfo
;
10 extern BOOLEAN KdBreakAfterSymbolLoad
;
11 extern BOOLEAN KdPitchDebugger
;
12 extern BOOLEAN KdIgnoreUmExceptions
;
17 PCPPORT PortInformation
,
24 PCPPORT PortInformation
,
30 PCPPORT PortInformation
,
34 /* SYMBOL ROUTINES **********************************************************/
37 #if defined(KDBG) || DBG
42 (NTAPI
*PKDBG_CLI_ROUTINE
)(
49 KdbRegisterCliCallback(
56 IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
62 IN PKTRAP_FRAME Context
66 KdbSymGetAddressInformation(
67 IN PROSSYM_INFO RosSymInfo
,
68 IN ULONG_PTR RelativeAddress
,
70 IN PROSSYM_LINEINFO RosSymLineInfo
72 OUT PULONG LineNumber OPTIONAL
,
73 OUT PCH FileName OPTIONAL
,
74 OUT PCH FunctionName OPTIONAL
80 # define KdbInit() KdbpCliInit()
81 # define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
83 # define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
84 # define KdbInit() do { } while (0)
85 # define KdbEnter() do { } while (0)
86 # define KdbModuleLoaded(X) do { } while (0)
89 /* KD ROUTINES ***************************************************************/
91 typedef enum _KD_CONTINUE_TYPE
94 kdDoNotHandleException
,
101 (NTAPI
*PKDP_INIT_ROUTINE
)(
102 struct _KD_DISPATCH_TABLE
*DispatchTable
,
108 (NTAPI
*PKDP_PRINT_ROUTINE
)(
115 (NTAPI
*PKDP_PROMPT_ROUTINE
)(PCH String
);
119 (NTAPI
*PKDP_EXCEPTION_ROUTINE
)(
120 PEXCEPTION_RECORD ExceptionRecord
,
122 PKTRAP_FRAME TrapFrame
128 IN PEXCEPTION_RECORD ExceptionRecord
,
130 IN KPROCESSOR_MODE PreviousMode
133 /* INIT ROUTINES *************************************************************/
139 PLOADER_PARAMETER_BLOCK LoaderBlock
145 struct _KD_DISPATCH_TABLE
*DispatchTable
,
152 struct _KD_DISPATCH_TABLE
*DispatchTable
,
159 struct _KD_DISPATCH_TABLE
*DispatchTable
,
166 struct _KD_DISPATCH_TABLE
*DispatchTable
,
173 struct _KD_DISPATCH_TABLE
*DispatchTable
,
179 struct _KD_DISPATCH_TABLE
*DispatchTable
,
183 /* KD ROUTINES ***************************************************************/
188 IN PKTRAP_FRAME TrapFrame
,
189 IN PEXCEPTION_RECORD ExceptionRecord
,
196 _In_reads_bytes_(Length
) PCHAR UnsafeString
,
202 _In_reads_bytes_(InStringLength
) PCHAR UnsafeInString
,
203 _In_ USHORT InStringLength
,
204 _Out_writes_bytes_(OutStringLength
) PCHAR UnsafeOutString
,
205 _In_ USHORT OutStringLength
,
206 _In_ KPROCESSOR_MODE PreviousMode
211 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList
);
238 KdpEnableSafeMem(VOID
);
241 /* KD GLOBALS ***************************************************************/
245 (NTAPI
*PKDEBUG_ROUTINE
)(
246 IN PKTRAP_FRAME TrapFrame
,
247 IN PKEXCEPTION_FRAME ExceptionFrame
,
248 IN PEXCEPTION_RECORD ExceptionRecord
,
250 IN KPROCESSOR_MODE PreviousMode
,
251 IN BOOLEAN SecondChance
254 /* serial debug connection */
255 #define DEFAULT_DEBUG_PORT 2 /* COM2 */
256 #define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
257 #define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
258 #define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
260 /* KD Native Modes */
268 /* KD Private Debug Modes */
269 typedef struct _KDP_DEBUG_MODE
281 /* Currently Supported Wrappers */
292 /* KD Internal Debug Services */
293 typedef enum _KDP_DEBUG_SERVICE
295 DumpNonPagedPool
= 0x1e, /* a */
296 ManualBugCheck
= 0x30, /* b */
297 DumpNonPagedPoolStats
= 0x2e, /* c */
298 DumpNewNonPagedPool
= 0x20, /* d */
299 DumpNewNonPagedPoolStats
= 0x12, /* e */
300 DumpAllThreads
= 0x21, /* f */
301 DumpUserThreads
= 0x22, /* g */
302 KdSpare1
= 0x23, /* h */
303 KdSpare2
= 0x17, /* i */
304 KdSpare3
= 0x24, /* j */
305 EnterDebugger
= 0x25, /* k */
306 ThatsWhatSheSaid
= 69 /* FIGURE IT OUT */
310 /* Dispatch Table for Wrapper Functions */
311 typedef struct _KD_DISPATCH_TABLE
313 LIST_ENTRY KdProvidersList
;
314 PKDP_INIT_ROUTINE KdpInitRoutine
;
315 PKDP_PRINT_ROUTINE KdpPrintRoutine
;
316 PKDP_PROMPT_ROUTINE KdpPromptRoutine
;
317 PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine
;
319 KD_DISPATCH_TABLE
, *PKD_DISPATCH_TABLE
;
321 /* The current Debugging Mode */
322 extern KDP_DEBUG_MODE KdpDebugMode
;
324 /* The current Port IRQ */
325 extern ULONG KdpPortIrq
;
327 /* The current Port */
328 extern ULONG KdpPort
;
330 /* Port Information for the Serial Native Mode */
331 extern ULONG SerialPortNumber
;
332 extern CPPORT SerialPortInfo
;
334 /* Init Functions for Native Providers */
335 extern PKDP_INIT_ROUTINE InitRoutines
[KdMax
];
337 /* Wrapper Init Function */
338 extern PKDP_INIT_ROUTINE WrapperInitRoutine
;
340 /* Dispatch Tables for Native Providers */
341 extern KD_DISPATCH_TABLE DispatchTable
[KdMax
];
343 /* Dispatch Table for the Wrapper */
344 extern KD_DISPATCH_TABLE WrapperTable
;
346 /* The KD Native Provider List */
347 extern LIST_ENTRY KdProviders
;
349 /* Whether to enter KDB as early as possible or not */
350 extern BOOLEAN KdpEarlyBreak
;
352 extern PKDEBUG_ROUTINE KiDebugRoutine
;
353 extern KD_CONTEXT KdpContext
;
354 extern ULONG Kd_WIN2000_Mask
;
358 #if DBG && defined(_M_IX86) && !defined(_WINKD_) // See ke/i386/traphdlr.c
359 #define ID_Win32PreServiceHook 'WSH0'
360 #define ID_Win32PostServiceHook 'WSH1'
361 typedef void (NTAPI
*PKDBG_PRESERVICEHOOK
)(ULONG
, PULONG_PTR
);
362 typedef ULONG_PTR (NTAPI
*PKDBG_POSTSERVICEHOOK
)(ULONG
, ULONG_PTR
);
363 extern PKDBG_PRESERVICEHOOK KeWin32PreServiceHook
;
364 extern PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook
;