3 * kernel debugger prototypes
6 #ifndef __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
7 #define __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
9 #include <internal/ke.h>
10 #include <internal/ldr.h>
11 #include <ntdll/ldr.h>
13 struct _KD_DISPATCH_TABLE
;
14 #define KdPrintEx(_x_) DbgPrintEx _x_
21 /* SYMBOL ROUTINES **********************************************************/
23 #if defined(KDBG) || defined(DBG)
26 KdbSymLoadUserModuleSymbols(IN PLDR_MODULE LdrModule
);
29 KdbSymFreeProcessSymbols(IN PEPROCESS Process
);
32 KdbSymLoadDriverSymbols(IN PUNICODE_STRING Filename
,
33 IN PMODULE_OBJECT Module
);
36 KdbSymUnloadDriverSymbols(IN PMODULE_OBJECT ModuleObject
);
39 KdbSymProcessBootSymbols(IN PCHAR FileName
);
42 KdbSymInit(IN PMODULE_TEXT_SECTION NtoskrnlTextSection
,
43 IN PMODULE_TEXT_SECTION LdrHalTextSection
);
46 KdbSymPrintAddress(IN PVOID Address
);
49 KdbDeleteProcessHook(IN PEPROCESS Process
);
52 KdbSymGetAddressInformation(IN PROSSYM_INFO RosSymInfo
,
53 IN ULONG_PTR RelativeAddress
,
54 OUT PULONG LineNumber OPTIONAL
,
55 OUT PCH FileName OPTIONAL
,
56 OUT PCH FunctionName OPTIONAL
);
58 typedef struct _KDB_MODULE_INFO
63 PROSSYM_INFO RosSymInfo
;
64 } KDB_MODULE_INFO
, *PKDB_MODULE_INFO
;
66 /* MACROS FOR NON-KDBG BUILDS ************************************************/
68 # define KDB_LOADUSERMODULE_HOOK(LDRMOD) KdbSymLoadUserModuleSymbols(LDRMOD)
69 # define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) KdbSymLoadDriverSymbols(FILENAME, MODULE)
70 # define KDB_UNLOADDRIVER_HOOK(MODULE) KdbSymUnloadDriverSymbols(MODULE)
71 # define KDB_LOADERINIT_HOOK(NTOS, HAL) KdbSymInit(NTOS, HAL)
72 # define KDB_SYMBOLFILE_HOOK(FILENAME) KdbSymProcessBootSymbols(FILENAME)
74 # define KDB_LOADUSERMODULE_HOOK(LDRMOD) do { } while (0)
75 # define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) do { } while (0)
76 # define KDB_UNLOADDRIVER_HOOK(MODULE) do { } while (0)
77 # define KDB_LOADERINIT_HOOK(NTOS, HAL) do { } while (0)
78 # define KDB_SYMBOLFILE_HOOK(FILENAME) do { } while (0)
79 # define KDB_CREATE_THREAD_HOOK(CONTEXT) do { } while (0)
82 #if defined(KDBG) || defined(DBG)
83 # define KeRosPrintAddress(ADDRESS) KdbSymPrintAddress(ADDRESS)
85 # define KeRosPrintAddress(ADDRESS) KiRosPrintAddress(ADDRESS)
89 # define KdbInit() KdbpCliInit()
90 # define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
91 # define KDB_DELETEPROCESS_HOOK(PROCESS) KdbDeleteProcessHook(PROCESS)
93 # define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
94 # define KdbInit() do { } while (0)
95 # define KdbEnter() do { } while (0)
96 # define KdbModuleLoaded(X) do { } while (0)
97 # define KDB_DELETEPROCESS_HOOK(PROCESS) do { } while (0)
100 /* KD ROUTINES ***************************************************************/
102 typedef enum _KD_CONTINUE_TYPE
105 kdDoNotHandleException
,
111 (STDCALL
*PKDP_INIT_ROUTINE
)(struct _KD_DISPATCH_TABLE
*DispatchTable
,
116 (STDCALL
*PKDP_PRINT_ROUTINE
)(PCH String
);
120 (STDCALL
*PKDP_PROMPT_ROUTINE
)(PCH String
);
124 (STDCALL
*PKDP_EXCEPTION_ROUTINE
)(PEXCEPTION_RECORD ExceptionRecord
,
126 PKTRAP_FRAME TrapFrame
);
128 /* INIT ROUTINES *************************************************************/
132 KdpScreenInit(struct _KD_DISPATCH_TABLE
*DispatchTable
,
137 KdpSerialInit(struct _KD_DISPATCH_TABLE
*DispatchTable
,
142 KdpInitDebugLog(struct _KD_DISPATCH_TABLE
*DispatchTable
,
145 /* KD ROUTINES ***************************************************************/
149 KdpEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord
,
150 KPROCESSOR_MODE PreviousMode
,
152 PKTRAP_FRAME TrapFrame
,
158 KdpPrintString(PANSI_STRING String
);
162 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList
);
164 /* KD GLOBALS ***************************************************************/
166 /* serial debug connection */
167 #define DEFAULT_DEBUG_PORT 2 /* COM2 */
168 #define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
169 #define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
170 #define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
172 /* KD Native Modes */
178 /* KD Private Debug Modes */
179 typedef struct _KDP_DEBUG_MODE
188 /* Currently Supported Wrappers */
199 /* KD Internal Debug Services */
200 typedef enum _KDP_DEBUG_SERVICE
202 DumpNonPagedPool
= 0x1e, /* a */
203 ManualBugCheck
= 0x30, /* b */
204 DumpNonPagedPoolStats
= 0x2e, /* c */
205 DumpNewNonPagedPool
= 0x20, /* d */
206 DumpNewNonPagedPoolStats
= 0x12, /* e */
207 DumpAllThreads
= 0x21, /* f */
208 DumpUserThreads
= 0x22, /* g */
209 KdSpare1
= 0x23, /* h */
210 KdSpare2
= 0x17, /* i */
211 KdSpare3
= 0x24, /* j */
212 EnterDebugger
= 0x25 /* k */
215 /* Dispatch Table for Wrapper Functions */
216 typedef struct _KD_DISPATCH_TABLE
218 LIST_ENTRY KdProvidersList
;
219 PKDP_INIT_ROUTINE KdpInitRoutine
;
220 PKDP_PRINT_ROUTINE KdpPrintRoutine
;
221 PKDP_PROMPT_ROUTINE KdpPromptRoutine
;
222 PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine
;
223 } KD_DISPATCH_TABLE
, *PKD_DISPATCH_TABLE
;
225 /* The current Debugging Mode */
226 extern KDP_DEBUG_MODE KdpDebugMode
;
228 /* The current Port IRQ */
229 extern ULONG KdpPortIrq
;
231 /* The current Port */
232 extern ULONG KdpPort
;
234 /* Port Information for the Serial Native Mode */
235 extern KD_PORT_INFORMATION SerialPortInfo
;
237 /* Init Functions for Native Providers */
238 extern PKDP_INIT_ROUTINE InitRoutines
[KdMax
];
240 /* Wrapper Init Function */
241 extern PKDP_INIT_ROUTINE WrapperInitRoutine
;
243 /* Dispatch Tables for Native Providers */
244 extern KD_DISPATCH_TABLE DispatchTable
[KdMax
];
246 /* Dispatch Table for the Wrapper */
247 extern KD_DISPATCH_TABLE WrapperTable
;
249 /* The KD Native Provider List */
250 extern LIST_ENTRY KdProviders
;
252 #endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */