4 #define KdDebuggerEnabled _KdDebuggerEnabled
5 #define KdDebuggerNotPresent _KdDebuggerNotPresent
9 // Kernel Debugger Port Definition
11 typedef struct _KD_PORT_INFORMATION
16 } KD_PORT_INFORMATION
, *PKD_PORT_INFORMATION
;
18 struct _KD_DISPATCH_TABLE
;
19 extern KD_PORT_INFORMATION GdbPortInfo
;
20 extern BOOLEAN _KdDebuggerEnabled
;
21 extern BOOLEAN _KdDebuggerNotPresent
;
22 extern BOOLEAN KdBreakAfterSymbolLoad
;
23 extern BOOLEAN KdPitchDebugger
;
24 extern BOOLEAN KdIgnoreUmExceptions
;
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
74 (NTAPI
*PKDBG_CLI_ROUTINE
)(
81 KdbRegisterCliCallback(
88 IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
94 IN PKTRAP_FRAME Context
98 KdbSymGetAddressInformation(
99 IN PROSSYM_INFO RosSymInfo
,
100 IN ULONG_PTR RelativeAddress
,
102 IN PROSSYM_LINEINFO RosSymLineInfo
104 OUT PULONG LineNumber OPTIONAL
,
105 OUT PCH FileName OPTIONAL
,
106 OUT PCH FunctionName OPTIONAL
112 # define KdbInit() KdbpCliInit()
113 # define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
115 # define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
116 # define KdbInit() do { } while (0)
117 # define KdbEnter() do { } while (0)
118 # define KdbModuleLoaded(X) do { } while (0)
121 /* KD ROUTINES ***************************************************************/
123 typedef enum _KD_CONTINUE_TYPE
126 kdDoNotHandleException
,
133 (NTAPI
*PKDP_INIT_ROUTINE
)(
134 struct _KD_DISPATCH_TABLE
*DispatchTable
,
140 (NTAPI
*PKDP_PRINT_ROUTINE
)(
147 (NTAPI
*PKDP_PROMPT_ROUTINE
)(PCH String
);
151 (NTAPI
*PKDP_EXCEPTION_ROUTINE
)(
152 PEXCEPTION_RECORD ExceptionRecord
,
154 PKTRAP_FRAME TrapFrame
160 IN PEXCEPTION_RECORD ExceptionRecord
,
162 IN KPROCESSOR_MODE PreviousMode
165 /* INIT ROUTINES *************************************************************/
171 PLOADER_PARAMETER_BLOCK LoaderBlock
177 struct _KD_DISPATCH_TABLE
*DispatchTable
,
184 struct _KD_DISPATCH_TABLE
*DispatchTable
,
191 struct _KD_DISPATCH_TABLE
*DispatchTable
,
198 struct _KD_DISPATCH_TABLE
*DispatchTable
,
205 struct _KD_DISPATCH_TABLE
*DispatchTable
,
211 struct _KD_DISPATCH_TABLE
*DispatchTable
,
215 /* KD ROUTINES ***************************************************************/
220 IN PKTRAP_FRAME TrapFrame
,
221 IN PEXCEPTION_RECORD ExceptionRecord
,
235 IN USHORT InStringLength
,
237 IN USHORT OutStringLength
242 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList
);
269 KdpEnableSafeMem(VOID
);
272 /* KD GLOBALS ***************************************************************/
276 (NTAPI
*PKDEBUG_ROUTINE
)(
277 IN PKTRAP_FRAME TrapFrame
,
278 IN PKEXCEPTION_FRAME ExceptionFrame
,
279 IN PEXCEPTION_RECORD ExceptionRecord
,
281 IN KPROCESSOR_MODE PreviousMode
,
282 IN BOOLEAN SecondChance
285 /* serial debug connection */
286 #define DEFAULT_DEBUG_PORT 2 /* COM2 */
287 #define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
288 #define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
289 #define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
291 /* KD Native Modes */
299 /* KD Private Debug Modes */
300 typedef struct _KDP_DEBUG_MODE
312 /* Currently Supported Wrappers */
323 /* KD Internal Debug Services */
324 typedef enum _KDP_DEBUG_SERVICE
326 DumpNonPagedPool
= 0x1e, /* a */
327 ManualBugCheck
= 0x30, /* b */
328 DumpNonPagedPoolStats
= 0x2e, /* c */
329 DumpNewNonPagedPool
= 0x20, /* d */
330 DumpNewNonPagedPoolStats
= 0x12, /* e */
331 DumpAllThreads
= 0x21, /* f */
332 DumpUserThreads
= 0x22, /* g */
333 KdSpare1
= 0x23, /* h */
334 KdSpare2
= 0x17, /* i */
335 KdSpare3
= 0x24, /* j */
336 EnterDebugger
= 0x25, /* k */
337 ThatsWhatSheSaid
= 69 /* FIGURE IT OUT */
341 /* Dispatch Table for Wrapper Functions */
342 typedef struct _KD_DISPATCH_TABLE
344 LIST_ENTRY KdProvidersList
;
345 PKDP_INIT_ROUTINE KdpInitRoutine
;
346 PKDP_PRINT_ROUTINE KdpPrintRoutine
;
347 PKDP_PROMPT_ROUTINE KdpPromptRoutine
;
348 PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine
;
350 KD_DISPATCH_TABLE
, *PKD_DISPATCH_TABLE
;
352 /* The current Debugging Mode */
353 extern KDP_DEBUG_MODE KdpDebugMode
;
355 /* The current Port IRQ */
356 extern ULONG KdpPortIrq
;
358 /* The current Port */
359 extern ULONG KdpPort
;
361 /* Port Information for the Serial Native Mode */
362 extern KD_PORT_INFORMATION SerialPortInfo
;
364 /* Init Functions for Native Providers */
365 extern PKDP_INIT_ROUTINE InitRoutines
[KdMax
];
367 /* Wrapper Init Function */
368 extern PKDP_INIT_ROUTINE WrapperInitRoutine
;
370 /* Dispatch Tables for Native Providers */
371 extern KD_DISPATCH_TABLE DispatchTable
[KdMax
];
373 /* Dispatch Table for the Wrapper */
374 extern KD_DISPATCH_TABLE WrapperTable
;
376 /* The KD Native Provider List */
377 extern LIST_ENTRY KdProviders
;
379 /* Whether to enter KDB as early as possible or not */
380 extern BOOLEAN KdpEarlyBreak
;
382 extern PKDEBUG_ROUTINE KiDebugRoutine
;
383 extern KD_CONTEXT KdpContext
;
384 extern ULONG Kd_WIN2000_Mask
;
389 #define ID_Win32PreServiceHook 'WSH0'
390 #define ID_Win32PostServiceHook 'WSH1'
391 typedef void (NTAPI
*PKDBG_PRESERVICEHOOK
)(ULONG
, PULONG_PTR
);
392 typedef ULONG_PTR (NTAPI
*PKDBG_POSTSERVICEHOOK
)(ULONG
, ULONG_PTR
);
393 extern PKDBG_PRESERVICEHOOK KeWin32PreServiceHook
;
394 extern PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook
;