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
;
16 extern BOOLEAN _KdDebuggerEnabled
;
17 extern BOOLEAN _KdDebuggerNotPresent
;
18 extern BOOLEAN KdBreakAfterSymbolLoad
;
23 PKD_PORT_INFORMATION PortInformation
,
31 PKD_PORT_INFORMATION PortInformation
,
44 PKD_PORT_INFORMATION PortInformation
,
56 PKD_PORT_INFORMATION PortInformation
,
60 /* SYMBOL ROUTINES **********************************************************/
63 #if defined(KDBG) || defined(DBG)
66 KdbSymLoadUserModuleSymbols(IN PLDR_DATA_TABLE_ENTRY LdrModule
);
69 KdbSymFreeProcessSymbols(IN PEPROCESS Process
);
72 KdbSymLoadDriverSymbols(
73 IN PUNICODE_STRING Filename
,
74 IN PLDR_DATA_TABLE_ENTRY Module
78 KdbSymUnloadDriverSymbols(IN PLDR_DATA_TABLE_ENTRY ModuleObject
);
81 KdbSymProcessBootSymbols(IN PUNICODE_STRING FileName
);
85 IN PLDR_DATA_TABLE_ENTRY NtoskrnlTextSection
,
86 IN PLDR_DATA_TABLE_ENTRY LdrHalTextSection
90 KdbSymPrintAddress(IN PVOID Address
);
93 KdbDeleteProcessHook(IN PEPROCESS Process
);
96 KdbSymGetAddressInformation(
97 IN PROSSYM_INFO RosSymInfo
,
98 IN ULONG_PTR RelativeAddress
,
99 OUT PULONG LineNumber OPTIONAL
,
100 OUT PCH FileName OPTIONAL
,
101 OUT PCH FunctionName OPTIONAL
104 typedef struct _KDB_MODULE_INFO
109 PROSSYM_INFO RosSymInfo
;
110 } KDB_MODULE_INFO
, *PKDB_MODULE_INFO
;
112 /* MACROS FOR NON-KDBG BUILDS ************************************************/
114 # define KDB_LOADUSERMODULE_HOOK(LDRMOD) KdbSymLoadUserModuleSymbols(LDRMOD)
115 # define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) KdbSymLoadDriverSymbols(FILENAME, MODULE)
116 # define KDB_UNLOADDRIVER_HOOK(MODULE) KdbSymUnloadDriverSymbols(MODULE)
117 # define KDB_LOADERINIT_HOOK(NTOS, HAL) KdbSymInit(NTOS, HAL)
118 # define KDB_SYMBOLFILE_HOOK(FILENAME) KdbSymProcessBootSymbols(FILENAME)
120 # define KDB_LOADUSERMODULE_HOOK(LDRMOD) do { } while (0)
121 # define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) do { } while (0)
122 # define KDB_UNLOADDRIVER_HOOK(MODULE) do { } while (0)
123 # define KDB_LOADERINIT_HOOK(NTOS, HAL) do { } while (0)
124 # define KDB_SYMBOLFILE_HOOK(FILENAME) do { } while (0)
125 # define KDB_CREATE_THREAD_HOOK(CONTEXT) do { } while (0)
128 #if defined(KDBG) || defined(DBG)
129 # define KeRosPrintAddress(ADDRESS) KdbSymPrintAddress(ADDRESS)
131 # define KeRosPrintAddress(ADDRESS) KiRosPrintAddress(ADDRESS)
135 # define KdbInit() KdbpCliInit()
136 # define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
137 # define KDB_DELETEPROCESS_HOOK(PROCESS) KdbDeleteProcessHook(PROCESS)
139 # define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
140 # define KdbInit() do { } while (0)
141 # define KdbEnter() do { } while (0)
142 # define KdbModuleLoaded(X) do { } while (0)
143 # define KDB_DELETEPROCESS_HOOK(PROCESS) do { } while (0)
146 /* KD ROUTINES ***************************************************************/
148 typedef enum _KD_CONTINUE_TYPE
151 kdDoNotHandleException
,
157 (STDCALL
*PKDP_INIT_ROUTINE
)(
158 struct _KD_DISPATCH_TABLE
*DispatchTable
,
164 (STDCALL
*PKDP_PRINT_ROUTINE
)(
171 (STDCALL
*PKDP_PROMPT_ROUTINE
)(PCH String
);
175 (STDCALL
*PKDP_EXCEPTION_ROUTINE
)(
176 PEXCEPTION_RECORD ExceptionRecord
,
178 PKTRAP_FRAME TrapFrame
181 /* INIT ROUTINES *************************************************************/
186 struct _KD_DISPATCH_TABLE
*DispatchTable
,
193 struct _KD_DISPATCH_TABLE
*DispatchTable
,
200 struct _KD_DISPATCH_TABLE
*DispatchTable
,
207 struct _KD_DISPATCH_TABLE
*DispatchTable
,
214 struct _KD_DISPATCH_TABLE
*DispatchTable
,
217 /* KD ROUTINES ***************************************************************/
222 IN PKTRAP_FRAME TrapFrame
,
223 IN PEXCEPTION_RECORD ExceptionRecord
,
235 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList
);
244 /* KD GLOBALS ***************************************************************/
248 (NTAPI
*PKDEBUG_ROUTINE
)(
249 IN PKTRAP_FRAME TrapFrame
,
250 IN PKEXCEPTION_FRAME ExceptionFrame
,
251 IN PEXCEPTION_RECORD ExceptionRecord
,
253 IN KPROCESSOR_MODE PreviousMode
,
254 IN BOOLEAN SecondChance
257 /* serial debug connection */
258 #define DEFAULT_DEBUG_PORT 2 /* COM2 */
259 #define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
260 #define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
261 #define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
263 /* KD Native Modes */
270 /* KD Private Debug Modes */
271 typedef struct _KDP_DEBUG_MODE
283 /* Currently Supported Wrappers */
293 /* KD Internal Debug Services */
294 typedef enum _KDP_DEBUG_SERVICE
296 DumpNonPagedPool
= 0x1e, /* a */
297 ManualBugCheck
= 0x30, /* b */
298 DumpNonPagedPoolStats
= 0x2e, /* c */
299 DumpNewNonPagedPool
= 0x20, /* d */
300 DumpNewNonPagedPoolStats
= 0x12, /* e */
301 DumpAllThreads
= 0x21, /* f */
302 DumpUserThreads
= 0x22, /* g */
303 KdSpare1
= 0x23, /* h */
304 KdSpare2
= 0x17, /* i */
305 KdSpare3
= 0x24, /* j */
306 EnterDebugger
= 0x25 /* k */
309 /* Dispatch Table for Wrapper Functions */
310 typedef struct _KD_DISPATCH_TABLE
312 LIST_ENTRY KdProvidersList
;
313 PKDP_INIT_ROUTINE KdpInitRoutine
;
314 PKDP_PRINT_ROUTINE KdpPrintRoutine
;
315 PKDP_PROMPT_ROUTINE KdpPromptRoutine
;
316 PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine
;
317 } KD_DISPATCH_TABLE
, *PKD_DISPATCH_TABLE
;
319 /* The current Debugging Mode */
320 extern KDP_DEBUG_MODE KdpDebugMode
;
322 /* The current Port IRQ */
323 extern ULONG KdpPortIrq
;
325 /* The current Port */
326 extern ULONG KdpPort
;
328 /* Port Information for the Serial Native Mode */
329 extern KD_PORT_INFORMATION SerialPortInfo
;
331 /* Init Functions for Native Providers */
332 extern PKDP_INIT_ROUTINE InitRoutines
[KdMax
];
334 /* Wrapper Init Function */
335 extern PKDP_INIT_ROUTINE WrapperInitRoutine
;
337 /* Dispatch Tables for Native Providers */
338 extern KD_DISPATCH_TABLE DispatchTable
[KdMax
];
340 /* Dispatch Table for the Wrapper */
341 extern KD_DISPATCH_TABLE WrapperTable
;
343 /* The KD Native Provider List */
344 extern LIST_ENTRY KdProviders
;
346 /* Whether to enter KDB as early as possible or not */
347 extern BOOLEAN KdpEarlyBreak
;
349 extern PKDEBUG_ROUTINE KiDebugRoutine
;
352 #endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */