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
72 KdbSymLoadUserModuleSymbols(
73 IN PLDR_DATA_TABLE_ENTRY LdrModule
);
76 KdbSymFreeProcessSymbols(
77 IN PEPROCESS Process
);
80 KdbSymLoadDriverSymbols(
81 IN PUNICODE_STRING Filename
,
82 IN PLDR_DATA_TABLE_ENTRY Module
86 KdbSymUnloadDriverSymbols(
87 IN PLDR_DATA_TABLE_ENTRY ModuleObject
);
90 KdbSymProcessBootSymbols(
91 IN PANSI_STRING AnsiFileName
,
93 IN BOOLEAN LoadFromFile
);
97 IN PANSI_STRING FileName
,
98 IN PKD_SYMBOLS_INFO SymbolInfo
);
105 KdbDeleteProcessHook(
106 IN PEPROCESS Process
);
109 KdbSymGetAddressInformation(
110 IN PROSSYM_INFO RosSymInfo
,
111 IN ULONG_PTR RelativeAddress
,
112 OUT PULONG LineNumber OPTIONAL
,
113 OUT PCH FileName OPTIONAL
,
114 OUT PCH FunctionName OPTIONAL
117 typedef struct _KDB_MODULE_INFO
122 PROSSYM_INFO RosSymInfo
;
124 KDB_MODULE_INFO
, *PKDB_MODULE_INFO
;
126 /* MACROS FOR NON-KDBG BUILDS ************************************************/
128 # define KDB_LOADUSERMODULE_HOOK(LDRMOD) KdbSymLoadUserModuleSymbols(LDRMOD)
129 # define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) KdbSymLoadDriverSymbols(FILENAME, MODULE)
130 # define KDB_UNLOADDRIVER_HOOK(MODULE) KdbSymUnloadDriverSymbols(MODULE)
131 # define KDB_SYMBOLFILE_HOOK(FILENAME, SYMBOLINFO) KdbSymProcessSymbols((FILENAME), (SYMBOLINFO))
133 # define KDB_LOADUSERMODULE_HOOK(LDRMOD) do { } while (0)
134 # define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) do { } while (0)
135 # define KDB_UNLOADDRIVER_HOOK(MODULE) do { } while (0)
136 # define KDB_SYMBOLFILE_HOOK(FILENAME, SYMBOLINFO) do { } while (0)
137 # define KDB_CREATE_THREAD_HOOK(CONTEXT) do { } while (0)
140 #if defined(KDBG) || DBG
141 # define KeRosPrintAddress(ADDRESS) KdbSymPrintAddress(ADDRESS)
143 # define KeRosPrintAddress(ADDRESS) KiRosPrintAddress(ADDRESS)
147 # define KdbInit() KdbpCliInit()
148 # define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
149 # define KDB_DELETEPROCESS_HOOK(PROCESS) KdbDeleteProcessHook(PROCESS)
151 # define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
152 # define KdbInit() do { } while (0)
153 # define KdbEnter() do { } while (0)
154 # define KdbModuleLoaded(X) do { } while (0)
155 # define KDB_DELETEPROCESS_HOOK(PROCESS) do { } while (0)
158 /* KD ROUTINES ***************************************************************/
160 typedef enum _KD_CONTINUE_TYPE
163 kdDoNotHandleException
,
170 (NTAPI
*PKDP_INIT_ROUTINE
)(
171 struct _KD_DISPATCH_TABLE
*DispatchTable
,
177 (NTAPI
*PKDP_PRINT_ROUTINE
)(
184 (NTAPI
*PKDP_PROMPT_ROUTINE
)(PCH String
);
188 (NTAPI
*PKDP_EXCEPTION_ROUTINE
)(
189 PEXCEPTION_RECORD ExceptionRecord
,
191 PKTRAP_FRAME TrapFrame
194 /* INIT ROUTINES *************************************************************/
200 PLOADER_PARAMETER_BLOCK LoaderBlock
206 struct _KD_DISPATCH_TABLE
*DispatchTable
,
213 struct _KD_DISPATCH_TABLE
*DispatchTable
,
220 struct _KD_DISPATCH_TABLE
*DispatchTable
,
227 struct _KD_DISPATCH_TABLE
*DispatchTable
,
234 struct _KD_DISPATCH_TABLE
*DispatchTable
,
240 struct _KD_DISPATCH_TABLE
*DispatchTable
,
244 /* KD ROUTINES ***************************************************************/
249 IN PKTRAP_FRAME TrapFrame
,
250 IN PEXCEPTION_RECORD ExceptionRecord
,
262 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList
);
292 /* KD GLOBALS ***************************************************************/
296 (NTAPI
*PKDEBUG_ROUTINE
)(
297 IN PKTRAP_FRAME TrapFrame
,
298 IN PKEXCEPTION_FRAME ExceptionFrame
,
299 IN PEXCEPTION_RECORD ExceptionRecord
,
301 IN KPROCESSOR_MODE PreviousMode
,
302 IN BOOLEAN SecondChance
305 /* serial debug connection */
306 #define DEFAULT_DEBUG_PORT 2 /* COM2 */
307 #define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
308 #define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
309 #define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
311 /* KD Native Modes */
319 /* KD Private Debug Modes */
320 typedef struct _KDP_DEBUG_MODE
332 /* Currently Supported Wrappers */
343 /* KD Internal Debug Services */
344 typedef enum _KDP_DEBUG_SERVICE
346 DumpNonPagedPool
= 0x1e, /* a */
347 ManualBugCheck
= 0x30, /* b */
348 DumpNonPagedPoolStats
= 0x2e, /* c */
349 DumpNewNonPagedPool
= 0x20, /* d */
350 DumpNewNonPagedPoolStats
= 0x12, /* e */
351 DumpAllThreads
= 0x21, /* f */
352 DumpUserThreads
= 0x22, /* g */
353 KdSpare1
= 0x23, /* h */
354 KdSpare2
= 0x17, /* i */
355 KdSpare3
= 0x24, /* j */
356 EnterDebugger
= 0x25, /* k */
357 ThatsWhatSheSaid
= 69 /* FIGURE IT OUT */
361 /* Dispatch Table for Wrapper Functions */
362 typedef struct _KD_DISPATCH_TABLE
364 LIST_ENTRY KdProvidersList
;
365 PKDP_INIT_ROUTINE KdpInitRoutine
;
366 PKDP_PRINT_ROUTINE KdpPrintRoutine
;
367 PKDP_PROMPT_ROUTINE KdpPromptRoutine
;
368 PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine
;
370 KD_DISPATCH_TABLE
, *PKD_DISPATCH_TABLE
;
372 /* The current Debugging Mode */
373 extern KDP_DEBUG_MODE KdpDebugMode
;
375 /* The current Port IRQ */
376 extern ULONG KdpPortIrq
;
378 /* The current Port */
379 extern ULONG KdpPort
;
381 /* Port Information for the Serial Native Mode */
382 extern KD_PORT_INFORMATION SerialPortInfo
;
384 /* Init Functions for Native Providers */
385 extern PKDP_INIT_ROUTINE InitRoutines
[KdMax
];
387 /* Wrapper Init Function */
388 extern PKDP_INIT_ROUTINE WrapperInitRoutine
;
390 /* Dispatch Tables for Native Providers */
391 extern KD_DISPATCH_TABLE DispatchTable
[KdMax
];
393 /* Dispatch Table for the Wrapper */
394 extern KD_DISPATCH_TABLE WrapperTable
;
396 /* The KD Native Provider List */
397 extern LIST_ENTRY KdProviders
;
399 /* Whether to enter KDB as early as possible or not */
400 extern BOOLEAN KdpEarlyBreak
;
402 extern PKDEBUG_ROUTINE KiDebugRoutine
;
405 #endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */