3 #include <cportlib/cportlib.h>
6 #define KdDebuggerEnabled _KdDebuggerEnabled
7 #define KdDebuggerNotPresent _KdDebuggerNotPresent
11 // Kernel Debugger Port Definition
13 struct _KD_DISPATCH_TABLE
;
14 extern CPPORT GdbPortInfo
;
15 extern BOOLEAN _KdDebuggerEnabled
;
16 extern BOOLEAN _KdDebuggerNotPresent
;
17 extern BOOLEAN KdBreakAfterSymbolLoad
;
18 extern BOOLEAN KdPitchDebugger
;
19 extern BOOLEAN KdIgnoreUmExceptions
;
24 PCPPORT PortInformation
,
31 PCPPORT PortInformation
,
37 PCPPORT PortInformation
,
41 /* SYMBOL ROUTINES **********************************************************/
44 #if defined(KDBG) || DBG
49 (NTAPI
*PKDBG_CLI_ROUTINE
)(
56 KdbRegisterCliCallback(
63 IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
69 IN PKTRAP_FRAME Context
73 KdbSymGetAddressInformation(
74 IN PROSSYM_INFO RosSymInfo
,
75 IN ULONG_PTR RelativeAddress
,
77 IN PROSSYM_LINEINFO RosSymLineInfo
79 OUT PULONG LineNumber OPTIONAL
,
80 OUT PCH FileName OPTIONAL
,
81 OUT PCH FunctionName OPTIONAL
87 # define KdbInit() KdbpCliInit()
88 # define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
90 # define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
91 # define KdbInit() do { } while (0)
92 # define KdbEnter() do { } while (0)
93 # define KdbModuleLoaded(X) do { } while (0)
96 /* KD ROUTINES ***************************************************************/
98 typedef enum _KD_CONTINUE_TYPE
101 kdDoNotHandleException
,
108 (NTAPI
*PKDP_INIT_ROUTINE
)(
109 struct _KD_DISPATCH_TABLE
*DispatchTable
,
115 (NTAPI
*PKDP_PRINT_ROUTINE
)(
122 (NTAPI
*PKDP_PROMPT_ROUTINE
)(PCH String
);
126 (NTAPI
*PKDP_EXCEPTION_ROUTINE
)(
127 PEXCEPTION_RECORD ExceptionRecord
,
129 PKTRAP_FRAME TrapFrame
135 IN PEXCEPTION_RECORD ExceptionRecord
,
137 IN KPROCESSOR_MODE PreviousMode
140 /* INIT ROUTINES *************************************************************/
146 PLOADER_PARAMETER_BLOCK LoaderBlock
152 struct _KD_DISPATCH_TABLE
*DispatchTable
,
159 struct _KD_DISPATCH_TABLE
*DispatchTable
,
166 struct _KD_DISPATCH_TABLE
*DispatchTable
,
173 struct _KD_DISPATCH_TABLE
*DispatchTable
,
180 struct _KD_DISPATCH_TABLE
*DispatchTable
,
186 struct _KD_DISPATCH_TABLE
*DispatchTable
,
190 /* KD ROUTINES ***************************************************************/
195 IN PKTRAP_FRAME TrapFrame
,
196 IN PEXCEPTION_RECORD ExceptionRecord
,
210 IN USHORT InStringLength
,
212 IN USHORT OutStringLength
217 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList
);
244 KdpEnableSafeMem(VOID
);
247 /* KD GLOBALS ***************************************************************/
251 (NTAPI
*PKDEBUG_ROUTINE
)(
252 IN PKTRAP_FRAME TrapFrame
,
253 IN PKEXCEPTION_FRAME ExceptionFrame
,
254 IN PEXCEPTION_RECORD ExceptionRecord
,
256 IN KPROCESSOR_MODE PreviousMode
,
257 IN BOOLEAN SecondChance
260 /* serial debug connection */
261 #define DEFAULT_DEBUG_PORT 2 /* COM2 */
262 #define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
263 #define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
264 #define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
266 /* KD Native Modes */
274 /* KD Private Debug Modes */
275 typedef struct _KDP_DEBUG_MODE
287 /* Currently Supported Wrappers */
298 /* KD Internal Debug Services */
299 typedef enum _KDP_DEBUG_SERVICE
301 DumpNonPagedPool
= 0x1e, /* a */
302 ManualBugCheck
= 0x30, /* b */
303 DumpNonPagedPoolStats
= 0x2e, /* c */
304 DumpNewNonPagedPool
= 0x20, /* d */
305 DumpNewNonPagedPoolStats
= 0x12, /* e */
306 DumpAllThreads
= 0x21, /* f */
307 DumpUserThreads
= 0x22, /* g */
308 KdSpare1
= 0x23, /* h */
309 KdSpare2
= 0x17, /* i */
310 KdSpare3
= 0x24, /* j */
311 EnterDebugger
= 0x25, /* k */
312 ThatsWhatSheSaid
= 69 /* FIGURE IT OUT */
316 /* Dispatch Table for Wrapper Functions */
317 typedef struct _KD_DISPATCH_TABLE
319 LIST_ENTRY KdProvidersList
;
320 PKDP_INIT_ROUTINE KdpInitRoutine
;
321 PKDP_PRINT_ROUTINE KdpPrintRoutine
;
322 PKDP_PROMPT_ROUTINE KdpPromptRoutine
;
323 PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine
;
325 KD_DISPATCH_TABLE
, *PKD_DISPATCH_TABLE
;
327 /* The current Debugging Mode */
328 extern KDP_DEBUG_MODE KdpDebugMode
;
330 /* The current Port IRQ */
331 extern ULONG KdpPortIrq
;
333 /* The current Port */
334 extern ULONG KdpPort
;
336 /* Port Information for the Serial Native Mode */
337 extern ULONG SerialPortNumber
;
338 extern CPPORT SerialPortInfo
;
340 /* Init Functions for Native Providers */
341 extern PKDP_INIT_ROUTINE InitRoutines
[KdMax
];
343 /* Wrapper Init Function */
344 extern PKDP_INIT_ROUTINE WrapperInitRoutine
;
346 /* Dispatch Tables for Native Providers */
347 extern KD_DISPATCH_TABLE DispatchTable
[KdMax
];
349 /* Dispatch Table for the Wrapper */
350 extern KD_DISPATCH_TABLE WrapperTable
;
352 /* The KD Native Provider List */
353 extern LIST_ENTRY KdProviders
;
355 /* Whether to enter KDB as early as possible or not */
356 extern BOOLEAN KdpEarlyBreak
;
358 extern PKDEBUG_ROUTINE KiDebugRoutine
;
359 extern KD_CONTEXT KdpContext
;
360 extern ULONG Kd_WIN2000_Mask
;
365 #define ID_Win32PreServiceHook 'WSH0'
366 #define ID_Win32PostServiceHook 'WSH1'
367 typedef void (NTAPI
*PKDBG_PRESERVICEHOOK
)(ULONG
, PULONG_PTR
);
368 typedef ULONG_PTR (NTAPI
*PKDBG_POSTSERVICEHOOK
)(ULONG
, ULONG_PTR
);
369 extern PKDBG_PRESERVICEHOOK KeWin32PreServiceHook
;
370 extern PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook
;