1 #ifndef __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
2 #define __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
5 #define KdDebuggerEnabled _KdDebuggerEnabled
6 #define KdDebuggerNotPresent _KdDebuggerNotPresent
10 // Kernel Debugger Port Definition
12 typedef struct _KD_PORT_INFORMATION
17 } KD_PORT_INFORMATION
, *PKD_PORT_INFORMATION
;
19 struct _KD_DISPATCH_TABLE
;
20 extern KD_PORT_INFORMATION GdbPortInfo
;
21 extern BOOLEAN _KdDebuggerEnabled
;
22 extern BOOLEAN _KdDebuggerNotPresent
;
23 extern BOOLEAN KdBreakAfterSymbolLoad
;
24 extern BOOLEAN KdPitchDebugger
;
29 PKD_PORT_INFORMATION PortInformation
,
37 PKD_PORT_INFORMATION PortInformation
,
50 PKD_PORT_INFORMATION PortInformation
,
62 PKD_PORT_INFORMATION PortInformation
,
66 /* SYMBOL ROUTINES **********************************************************/
69 #if defined(KDBG) || DBG
73 IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
81 KdbSymGetAddressInformation(
82 IN PROSSYM_INFO RosSymInfo
,
83 IN ULONG_PTR RelativeAddress
,
84 OUT PULONG LineNumber OPTIONAL
,
85 OUT PCH FileName OPTIONAL
,
86 OUT PCH FunctionName OPTIONAL
91 # define KdbInit() KdbpCliInit()
92 # define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
94 # define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
95 # define KdbInit() do { } while (0)
96 # define KdbEnter() do { } while (0)
97 # define KdbModuleLoaded(X) do { } while (0)
100 /* KD ROUTINES ***************************************************************/
102 typedef enum _KD_CONTINUE_TYPE
105 kdDoNotHandleException
,
112 (NTAPI
*PKDP_INIT_ROUTINE
)(
113 struct _KD_DISPATCH_TABLE
*DispatchTable
,
119 (NTAPI
*PKDP_PRINT_ROUTINE
)(
126 (NTAPI
*PKDP_PROMPT_ROUTINE
)(PCH String
);
130 (NTAPI
*PKDP_EXCEPTION_ROUTINE
)(
131 PEXCEPTION_RECORD ExceptionRecord
,
133 PKTRAP_FRAME TrapFrame
136 /* INIT ROUTINES *************************************************************/
142 PLOADER_PARAMETER_BLOCK LoaderBlock
148 struct _KD_DISPATCH_TABLE
*DispatchTable
,
155 struct _KD_DISPATCH_TABLE
*DispatchTable
,
162 struct _KD_DISPATCH_TABLE
*DispatchTable
,
169 struct _KD_DISPATCH_TABLE
*DispatchTable
,
176 struct _KD_DISPATCH_TABLE
*DispatchTable
,
182 struct _KD_DISPATCH_TABLE
*DispatchTable
,
186 /* KD ROUTINES ***************************************************************/
191 IN PKTRAP_FRAME TrapFrame
,
192 IN PEXCEPTION_RECORD ExceptionRecord
,
204 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList
);
234 /* KD GLOBALS ***************************************************************/
238 (NTAPI
*PKDEBUG_ROUTINE
)(
239 IN PKTRAP_FRAME TrapFrame
,
240 IN PKEXCEPTION_FRAME ExceptionFrame
,
241 IN PEXCEPTION_RECORD ExceptionRecord
,
243 IN KPROCESSOR_MODE PreviousMode
,
244 IN BOOLEAN SecondChance
247 /* serial debug connection */
248 #define DEFAULT_DEBUG_PORT 2 /* COM2 */
249 #define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
250 #define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
251 #define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
253 /* KD Native Modes */
261 /* KD Private Debug Modes */
262 typedef struct _KDP_DEBUG_MODE
274 /* Currently Supported Wrappers */
285 /* KD Internal Debug Services */
286 typedef enum _KDP_DEBUG_SERVICE
288 DumpNonPagedPool
= 0x1e, /* a */
289 ManualBugCheck
= 0x30, /* b */
290 DumpNonPagedPoolStats
= 0x2e, /* c */
291 DumpNewNonPagedPool
= 0x20, /* d */
292 DumpNewNonPagedPoolStats
= 0x12, /* e */
293 DumpAllThreads
= 0x21, /* f */
294 DumpUserThreads
= 0x22, /* g */
295 KdSpare1
= 0x23, /* h */
296 KdSpare2
= 0x17, /* i */
297 KdSpare3
= 0x24, /* j */
298 EnterDebugger
= 0x25, /* k */
299 ThatsWhatSheSaid
= 69 /* FIGURE IT OUT */
303 /* Dispatch Table for Wrapper Functions */
304 typedef struct _KD_DISPATCH_TABLE
306 LIST_ENTRY KdProvidersList
;
307 PKDP_INIT_ROUTINE KdpInitRoutine
;
308 PKDP_PRINT_ROUTINE KdpPrintRoutine
;
309 PKDP_PROMPT_ROUTINE KdpPromptRoutine
;
310 PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine
;
312 KD_DISPATCH_TABLE
, *PKD_DISPATCH_TABLE
;
314 /* The current Debugging Mode */
315 extern KDP_DEBUG_MODE KdpDebugMode
;
317 /* The current Port IRQ */
318 extern ULONG KdpPortIrq
;
320 /* The current Port */
321 extern ULONG KdpPort
;
323 /* Port Information for the Serial Native Mode */
324 extern KD_PORT_INFORMATION SerialPortInfo
;
326 /* Init Functions for Native Providers */
327 extern PKDP_INIT_ROUTINE InitRoutines
[KdMax
];
329 /* Wrapper Init Function */
330 extern PKDP_INIT_ROUTINE WrapperInitRoutine
;
332 /* Dispatch Tables for Native Providers */
333 extern KD_DISPATCH_TABLE DispatchTable
[KdMax
];
335 /* Dispatch Table for the Wrapper */
336 extern KD_DISPATCH_TABLE WrapperTable
;
338 /* The KD Native Provider List */
339 extern LIST_ENTRY KdProviders
;
341 /* Whether to enter KDB as early as possible or not */
342 extern BOOLEAN KdpEarlyBreak
;
344 extern PKDEBUG_ROUTINE KiDebugRoutine
;
347 #endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */