1 #ifndef __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
2 #define __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
5 // Kernel Debugger Port Definition
7 typedef struct _KD_PORT_INFORMATION
12 } KD_PORT_INFORMATION
, *PKD_PORT_INFORMATION
;
14 struct _KD_DISPATCH_TABLE
;
15 extern KD_PORT_INFORMATION GdbPortInfo
;
20 PKD_PORT_INFORMATION PortInformation
,
28 PKD_PORT_INFORMATION PortInformation
,
41 PKD_PORT_INFORMATION PortInformation
,
53 PKD_PORT_INFORMATION PortInformation
,
57 /* SYMBOL ROUTINES **********************************************************/
60 #if defined(KDBG) || defined(DBG)
63 KdbSymLoadUserModuleSymbols(IN PLDR_DATA_TABLE_ENTRY LdrModule
);
66 KdbSymFreeProcessSymbols(IN PEPROCESS Process
);
69 KdbSymLoadDriverSymbols(
70 IN PUNICODE_STRING Filename
,
71 IN PLDR_DATA_TABLE_ENTRY Module
75 KdbSymUnloadDriverSymbols(IN PLDR_DATA_TABLE_ENTRY ModuleObject
);
78 KdbSymProcessBootSymbols(IN PCHAR FileName
);
82 IN PLDR_DATA_TABLE_ENTRY NtoskrnlTextSection
,
83 IN PLDR_DATA_TABLE_ENTRY LdrHalTextSection
87 KdbSymPrintAddress(IN PVOID Address
);
90 KdbDeleteProcessHook(IN PEPROCESS Process
);
93 KdbSymGetAddressInformation(
94 IN PROSSYM_INFO RosSymInfo
,
95 IN ULONG_PTR RelativeAddress
,
96 OUT PULONG LineNumber OPTIONAL
,
97 OUT PCH FileName OPTIONAL
,
98 OUT PCH FunctionName OPTIONAL
101 typedef struct _KDB_MODULE_INFO
106 PROSSYM_INFO RosSymInfo
;
107 } KDB_MODULE_INFO
, *PKDB_MODULE_INFO
;
109 /* MACROS FOR NON-KDBG BUILDS ************************************************/
111 # define KDB_LOADUSERMODULE_HOOK(LDRMOD) KdbSymLoadUserModuleSymbols(LDRMOD)
112 # define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) KdbSymLoadDriverSymbols(FILENAME, MODULE)
113 # define KDB_UNLOADDRIVER_HOOK(MODULE) KdbSymUnloadDriverSymbols(MODULE)
114 # define KDB_LOADERINIT_HOOK(NTOS, HAL) KdbSymInit(NTOS, HAL)
115 # define KDB_SYMBOLFILE_HOOK(FILENAME) KdbSymProcessBootSymbols(FILENAME)
117 # define KDB_LOADUSERMODULE_HOOK(LDRMOD) do { } while (0)
118 # define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) do { } while (0)
119 # define KDB_UNLOADDRIVER_HOOK(MODULE) do { } while (0)
120 # define KDB_LOADERINIT_HOOK(NTOS, HAL) do { } while (0)
121 # define KDB_SYMBOLFILE_HOOK(FILENAME) do { } while (0)
122 # define KDB_CREATE_THREAD_HOOK(CONTEXT) do { } while (0)
125 #if defined(KDBG) || defined(DBG)
126 # define KeRosPrintAddress(ADDRESS) KdbSymPrintAddress(ADDRESS)
128 # define KeRosPrintAddress(ADDRESS) KiRosPrintAddress(ADDRESS)
132 # define KdbInit() KdbpCliInit()
133 # define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
134 # define KDB_DELETEPROCESS_HOOK(PROCESS) KdbDeleteProcessHook(PROCESS)
136 # define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
137 # define KdbInit() do { } while (0)
138 # define KdbEnter() do { } while (0)
139 # define KdbModuleLoaded(X) do { } while (0)
140 # define KDB_DELETEPROCESS_HOOK(PROCESS) do { } while (0)
143 /* KD ROUTINES ***************************************************************/
145 typedef enum _KD_CONTINUE_TYPE
148 kdDoNotHandleException
,
154 (STDCALL
*PKDP_INIT_ROUTINE
)(
155 struct _KD_DISPATCH_TABLE
*DispatchTable
,
161 (STDCALL
*PKDP_PRINT_ROUTINE
)(
168 (STDCALL
*PKDP_PROMPT_ROUTINE
)(PCH String
);
172 (STDCALL
*PKDP_EXCEPTION_ROUTINE
)(
173 PEXCEPTION_RECORD ExceptionRecord
,
175 PKTRAP_FRAME TrapFrame
178 /* INIT ROUTINES *************************************************************/
183 struct _KD_DISPATCH_TABLE
*DispatchTable
,
190 struct _KD_DISPATCH_TABLE
*DispatchTable
,
197 struct _KD_DISPATCH_TABLE
*DispatchTable
,
204 struct _KD_DISPATCH_TABLE
*DispatchTable
,
211 struct _KD_DISPATCH_TABLE
*DispatchTable
,
214 /* KD ROUTINES ***************************************************************/
218 KdpEnterDebuggerException(
219 PEXCEPTION_RECORD ExceptionRecord
,
220 KPROCESSOR_MODE PreviousMode
,
222 PKTRAP_FRAME TrapFrame
,
235 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList
);
244 /* KD GLOBALS ***************************************************************/
246 /* serial debug connection */
247 #define DEFAULT_DEBUG_PORT 2 /* COM2 */
248 #define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
249 #define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
250 #define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
252 /* KD Native Modes */
259 /* KD Private Debug Modes */
260 typedef struct _KDP_DEBUG_MODE
272 /* Currently Supported Wrappers */
282 /* KD Internal Debug Services */
283 typedef enum _KDP_DEBUG_SERVICE
285 DumpNonPagedPool
= 0x1e, /* a */
286 ManualBugCheck
= 0x30, /* b */
287 DumpNonPagedPoolStats
= 0x2e, /* c */
288 DumpNewNonPagedPool
= 0x20, /* d */
289 DumpNewNonPagedPoolStats
= 0x12, /* e */
290 DumpAllThreads
= 0x21, /* f */
291 DumpUserThreads
= 0x22, /* g */
292 KdSpare1
= 0x23, /* h */
293 KdSpare2
= 0x17, /* i */
294 KdSpare3
= 0x24, /* j */
295 EnterDebugger
= 0x25 /* k */
298 /* Dispatch Table for Wrapper Functions */
299 typedef struct _KD_DISPATCH_TABLE
301 LIST_ENTRY KdProvidersList
;
302 PKDP_INIT_ROUTINE KdpInitRoutine
;
303 PKDP_PRINT_ROUTINE KdpPrintRoutine
;
304 PKDP_PROMPT_ROUTINE KdpPromptRoutine
;
305 PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine
;
306 } KD_DISPATCH_TABLE
, *PKD_DISPATCH_TABLE
;
308 /* The current Debugging Mode */
309 extern KDP_DEBUG_MODE KdpDebugMode
;
311 /* The current Port IRQ */
312 extern ULONG KdpPortIrq
;
314 /* The current Port */
315 extern ULONG KdpPort
;
317 /* Port Information for the Serial Native Mode */
318 extern KD_PORT_INFORMATION SerialPortInfo
;
320 /* Init Functions for Native Providers */
321 extern PKDP_INIT_ROUTINE InitRoutines
[KdMax
];
323 /* Wrapper Init Function */
324 extern PKDP_INIT_ROUTINE WrapperInitRoutine
;
326 /* Dispatch Tables for Native Providers */
327 extern KD_DISPATCH_TABLE DispatchTable
[KdMax
];
329 /* Dispatch Table for the Wrapper */
330 extern KD_DISPATCH_TABLE WrapperTable
;
332 /* The KD Native Provider List */
333 extern LIST_ENTRY KdProviders
;
335 /* Whether to enter KDB as early as possible or not */
336 extern BOOLEAN KdpEarlyBreak
;
339 #endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */