-/*\r
- * PROJECT: ReactOS Kernel\r
- * LICENSE: GPL - See COPYING in the top level directory\r
- * FILE: ntoskrnl/include/kd64.h\r
- * PURPOSE: Internal header for the KD64 Library\r
- * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)\r
- */\r
-\r
-//\r
-// Breakpoint Status Flags\r
-//\r
-typedef enum _KDP_BREAKPOINT_FLAGS\r
-{\r
- KdpBreakpointActive = 1,\r
- KdpBreakpointPending = 2,\r
- KdpBreakpointSuspended = 4,\r
- KdpBreakpointExpired = 8\r
-} KDP_BREAKPOINT_FLAGS;\r
-\r
-//\r
-// Structure for Breakpoints\r
-//\r
-typedef struct _BREAKPOINT_ENTRY\r
-{\r
- ULONG Flags;\r
- PKPROCESS Process;\r
- PVOID Address;\r
- UCHAR Content;\r
-} BREAKPOINT_ENTRY, *PBREAKPOINT_ENTRY;\r
-\r
-//\r
-// Debug and Multi-Processor Switch Routine Definitions\r
-//\r
-typedef\r
-BOOLEAN\r
-(NTAPI *PKDEBUG_ROUTINE)(\r
- IN PKTRAP_FRAME TrapFrame,\r
- IN PKEXCEPTION_FRAME ExceptionFrame,\r
- IN PEXCEPTION_RECORD ExceptionRecord,\r
- IN PCONTEXT Context,\r
- IN KPROCESSOR_MODE PreviousMode,\r
- IN BOOLEAN SecondChance\r
-);\r
-\r
-typedef\r
-BOOLEAN\r
-(NTAPI *PKDEBUG_SWITCH_ROUTINE)(\r
- IN PEXCEPTION_RECORD ExceptionRecord,\r
- IN PCONTEXT Context,\r
- IN BOOLEAN SecondChance\r
-);\r
-\r
-//\r
-// Initialization Routines\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdInitSystem(\r
- ULONG Reserved,\r
- PLOADER_PARAMETER_BLOCK LoaderBlock\r
-);\r
-\r
-//\r
-// Debug and Multi-Processor Switch Routines\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdpEnterDebuggerException(\r
- IN PKTRAP_FRAME TrapFrame,\r
- IN PKEXCEPTION_FRAME ExceptionFrame,\r
- IN PEXCEPTION_RECORD ExceptionRecord,\r
- IN PCONTEXT Context,\r
- IN KPROCESSOR_MODE PreviousMode,\r
- IN BOOLEAN SecondChance\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpSwitchProcessor(\r
- IN PEXCEPTION_RECORD ExceptionRecord,\r
- IN OUT PCONTEXT ContextRecord,\r
- IN BOOLEAN SecondChanceException\r
-);\r
-\r
-//\r
-// Time Slip Support\r
-//\r
-VOID\r
-NTAPI\r
-KdpTimeSlipWork(\r
- IN PVOID Context\r
-);\r
-\r
-VOID\r
-NTAPI\r
-KdpTimeSlipDpcRoutine(\r
- IN PKDPC Dpc,\r
- IN PVOID DeferredContext,\r
- IN PVOID SystemArgument1,\r
- IN PVOID SystemArgument2\r
-);\r
-\r
-//\r
-// Debug Trap Handlers\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdpStub(\r
- IN PKTRAP_FRAME TrapFrame,\r
- IN PKEXCEPTION_FRAME ExceptionFrame,\r
- IN PEXCEPTION_RECORD ExceptionRecord,\r
- IN PCONTEXT ContextRecord,\r
- IN KPROCESSOR_MODE PreviousMode,\r
- IN BOOLEAN SecondChanceException\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpTrap(\r
- IN PKTRAP_FRAME TrapFrame,\r
- IN PKEXCEPTION_FRAME ExceptionFrame,\r
- IN PEXCEPTION_RECORD ExceptionRecord,\r
- IN PCONTEXT ContextRecord,\r
- IN KPROCESSOR_MODE PreviousMode,\r
- IN BOOLEAN SecondChanceException\r
-);\r
-\r
-//\r
-// Port Locking\r
-//\r
-VOID\r
-NTAPI\r
-KdpPortLock(\r
- VOID\r
-);\r
-\r
-VOID\r
-NTAPI\r
-KdpPortUnlock(\r
- VOID\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpPollBreakInWithPortLock(\r
- VOID\r
-);\r
-\r
-//\r
-// Debugger Enable, Enter and Exit\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdEnterDebugger(\r
- IN PKTRAP_FRAME TrapFrame,\r
- IN PKEXCEPTION_FRAME ExceptionFrame\r
-);\r
-\r
-VOID\r
-NTAPI\r
-KdExitDebugger(\r
- IN BOOLEAN Entered\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-KdEnableDebuggerWithLock(\r
- IN BOOLEAN NeedLock\r
-);\r
-\r
-//\r
-// Debug Event Handlers\r
-//\r
-ULONG\r
-NTAPI\r
-KdpPrint(\r
- IN ULONG ComponentId,\r
- IN ULONG ComponentMask,\r
- IN LPSTR String,\r
- IN ULONG Length,\r
- IN KPROCESSOR_MODE PreviousMode,\r
- IN PKTRAP_FRAME TrapFrame,\r
- IN PKEXCEPTION_FRAME ExceptionFrame,\r
- OUT PBOOLEAN Status\r
-);\r
-\r
-ULONG\r
-NTAPI\r
-KdpSymbol(\r
- IN PSTRING DllPath,\r
- IN PKD_SYMBOLS_INFO DllBase,\r
- IN BOOLEAN Unload,\r
- IN KPROCESSOR_MODE PreviousMode,\r
- IN PCONTEXT ContextRecord,\r
- IN PKTRAP_FRAME TrapFrame,\r
- IN PKEXCEPTION_FRAME ExceptionFrame\r
-);\r
-\r
-//\r
-// State Change Notifications\r
-//\r
-BOOLEAN\r
-NTAPI\r
-KdpReportLoadSymbolsStateChange(\r
- IN PSTRING PathName,\r
- IN PKD_SYMBOLS_INFO SymbolInfo,\r
- IN BOOLEAN Unload,\r
- IN OUT PCONTEXT Context\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpReportExceptionStateChange(\r
- IN PEXCEPTION_RECORD ExceptionRecord,\r
- IN OUT PCONTEXT Context,\r
- IN BOOLEAN SecondChanceException\r
-);\r
-\r
-//\r
-// Breakpoint Support\r
-//\r
-VOID\r
-NTAPI\r
-KdpRestoreAllBreakpoints(\r
- VOID\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpDeleteBreakpoint(\r
- IN ULONG BpEntry\r
-);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpDeleteBreakpointRange(\r
- IN PVOID Base,\r
- IN PVOID Limit\r
-);\r
-\r
-ULONG\r
-NTAPI\r
-KdpAddBreakpoint(\r
- IN PVOID Address\r
-);\r
-\r
-VOID\r
-NTAPI\r
-KdpSetContextState(IN PDBGKD_WAIT_STATE_CHANGE64 WaitStateChange,\r
- IN PCONTEXT Context);\r
-\r
-BOOLEAN\r
-NTAPI\r
-KdpReport(IN PKTRAP_FRAME TrapFrame,\r
- IN PKEXCEPTION_FRAME ExceptionFrame,\r
- IN PEXCEPTION_RECORD ExceptionRecord,\r
- IN PCONTEXT ContextRecord,\r
- IN KPROCESSOR_MODE PreviousMode,\r
- IN BOOLEAN SecondChanceException);\r
-\r
-VOID\r
-NTAPI\r
-KdpSysGetVersion(IN PDBGKD_GET_VERSION64 Version);\r
-\r
-\r
-//\r
-// Global KD Data\r
-//\r
-extern DBGKD_GET_VERSION64 KdVersionBlock;\r
-extern KDDEBUGGER_DATA64 KdDebuggerDataBlock;\r
-extern LIST_ENTRY KdpDebuggerDataListHead;\r
-extern KSPIN_LOCK KdpDataSpinLock;\r
-extern LARGE_INTEGER KdPerformanceCounterRate;\r
-extern LARGE_INTEGER KdTimerStart;\r
-extern ULONG KdDisableCount;\r
-extern KD_CONTEXT KdpContext;\r
-extern PKDEBUG_ROUTINE KiDebugRoutine;\r
-extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;\r
-extern BOOLEAN KdBreakAfterSymbolLoad;\r
-extern BOOLEAN KdPitchDebugger;\r
-extern BOOLEAN _KdDebuggerNotPresent;\r
-extern BOOLEAN _KdDebuggerEnabled;\r
-extern BOOLEAN KdAutoEnableOnEvent;\r
-extern BOOLEAN KdPreviouslyEnabled;\r
-extern BOOLEAN KdpDebuggerStructuresInitialized;\r
-extern BOOLEAN KdEnteredDebugger;\r
-extern KDPC KdpTimeSlipDpc;\r
-extern KTIMER KdpTimeSlipTimer;\r
-extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem;\r
-extern LONG KdpTimeSlipPending;\r
-extern PKEVENT KdpTimeSlipEvent;\r
-extern KSPIN_LOCK KdpTimeSlipEventLock;\r
-extern BOOLEAN KdpPortLocked;\r
-extern BOOLEAN KdpControlCPressed;\r
-extern KSPIN_LOCK KdpDebuggerLock;\r
-extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;\r
-extern ULONG KdComponentTableSize;\r
-extern ULONG Kd_WIN2000_Mask;\r
-extern PULONG KdComponentTable[104];\r
-extern CHAR KdpMessageBuffer[4096], KdpPathBuffer[4096];\r
-extern BREAKPOINT_ENTRY KdpBreakpointTable[20];\r
-extern ULONG KdpBreakpointInstruction;\r
-extern BOOLEAN KdpOweBreakpoint;\r
-extern BOOLEAN BreakpointsSuspended;\r
-extern ULONG KdpNumInternalBreakpoints;\r
-extern ULONG KdpCurrentSymbolStart, KdpCurrentSymbolEnd;\r
-extern ULONG TraceDataBuffer[40];\r
-extern ULONG TraceDataBufferPosition;\r
+/*
+ * PROJECT: ReactOS Kernel
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: ntoskrnl/include/kd64.h
+ * PURPOSE: Internal header for the KD64 Library
+ * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
+ */
+
+//
+// Maximum supported number of breakpoints
+//
+#define KD_BREAKPOINT_MAX 32
+
+//
+// Breakpoint Status Flags
+//
+typedef enum _KDP_BREAKPOINT_FLAGS
+{
+ KdpBreakpointActive = 1,
+ KdpBreakpointPending = 2,
+ KdpBreakpointSuspended = 4,
+ KdpBreakpointExpired = 8
+} KDP_BREAKPOINT_FLAGS;
+
+//
+// Structure for Breakpoints
+//
+typedef struct _BREAKPOINT_ENTRY
+{
+ ULONG Flags;
+ PKPROCESS Process;
+ PVOID Address;
+ KD_BREAKPOINT_TYPE Content;
+} BREAKPOINT_ENTRY, *PBREAKPOINT_ENTRY;
+
+//
+// Debug and Multi-Processor Switch Routine Definitions
+//
+typedef
+BOOLEAN
+(NTAPI *PKDEBUG_ROUTINE)(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT Context,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN BOOLEAN SecondChance
+);
+
+typedef
+BOOLEAN
+(NTAPI *PKDEBUG_SWITCH_ROUTINE)(
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT Context,
+ IN BOOLEAN SecondChance
+);
+
+//
+// Initialization Routines
+//
+BOOLEAN
+NTAPI
+KdInitSystem(
+ ULONG Reserved,
+ PLOADER_PARAMETER_BLOCK LoaderBlock
+);
+
+VOID
+NTAPI
+KdUpdateDataBlock(
+ VOID
+);
+
+//
+// Multi-Processor Switch Support
+//
+BOOLEAN
+NTAPI
+KdpSwitchProcessor(
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN OUT PCONTEXT ContextRecord,
+ IN BOOLEAN SecondChanceException
+);
+
+//
+// Time Slip Support
+//
+VOID
+NTAPI
+KdpTimeSlipWork(
+ IN PVOID Context
+);
+
+VOID
+NTAPI
+KdpTimeSlipDpcRoutine(
+ IN PKDPC Dpc,
+ IN PVOID DeferredContext,
+ IN PVOID SystemArgument1,
+ IN PVOID SystemArgument2
+);
+
+//
+// Debug Trap Handlers
+//
+BOOLEAN
+NTAPI
+KdpStub(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT ContextRecord,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN BOOLEAN SecondChanceException
+);
+
+BOOLEAN
+NTAPI
+KdpTrap(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT ContextRecord,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN BOOLEAN SecondChanceException
+);
+
+//
+// Port Locking
+//
+VOID
+NTAPI
+KdpPortLock(
+ VOID
+);
+
+VOID
+NTAPI
+KdpPortUnlock(
+ VOID
+);
+
+BOOLEAN
+NTAPI
+KdpPollBreakInWithPortLock(
+ VOID
+);
+
+//
+// Debugger Enable, Enter and Exit
+//
+BOOLEAN
+NTAPI
+KdEnterDebugger(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+VOID
+NTAPI
+KdExitDebugger(
+ IN BOOLEAN Entered
+);
+
+NTSTATUS
+NTAPI
+KdEnableDebuggerWithLock(
+ IN BOOLEAN NeedLock
+);
+
+//
+// Debug Event Handlers
+//
+NTSTATUS
+NTAPI
+KdpPrint(
+ IN ULONG ComponentId,
+ IN ULONG ComponentMask,
+ IN LPSTR String,
+ IN USHORT Length,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ OUT PBOOLEAN Status
+);
+
+BOOLEAN
+NTAPI
+KdpPrompt(
+ IN LPSTR InString,
+ IN USHORT InStringLength,
+ OUT LPSTR OutString,
+ IN USHORT OutStringLength,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+VOID
+NTAPI
+KdpSymbol(
+ IN PSTRING DllPath,
+ IN PKD_SYMBOLS_INFO DllBase,
+ IN BOOLEAN Unload,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PCONTEXT ContextRecord,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+VOID
+NTAPI
+KdpCommandString(
+ IN ULONG Length,
+ IN LPSTR String,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PCONTEXT ContextRecord,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+//
+// State Change Notifications
+//
+BOOLEAN
+NTAPI
+KdpReportLoadSymbolsStateChange(
+ IN PSTRING PathName,
+ IN PKD_SYMBOLS_INFO SymbolInfo,
+ IN BOOLEAN Unload,
+ IN OUT PCONTEXT Context
+);
+
+BOOLEAN
+NTAPI
+KdpReportExceptionStateChange(
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN OUT PCONTEXT Context,
+ IN BOOLEAN SecondChanceException
+);
+
+//
+// Breakpoint Support
+//
+VOID
+NTAPI
+KdpRestoreAllBreakpoints(
+ VOID
+);
+
+BOOLEAN
+NTAPI
+KdpDeleteBreakpoint(
+ IN ULONG BpEntry
+);
+
+BOOLEAN
+NTAPI
+KdpDeleteBreakpointRange(
+ IN PVOID Base,
+ IN PVOID Limit
+);
+
+ULONG
+NTAPI
+KdpAddBreakpoint(
+ IN PVOID Address
+);
+
+//
+// Architecture dependent support routines
+//
+
+//
+// Version
+//
+VOID
+NTAPI
+KdpSysGetVersion(
+ IN PDBGKD_GET_VERSION64 Version
+);
+
+//
+// Context
+//
+VOID
+NTAPI
+KdpGetStateChange(
+ IN PDBGKD_MANIPULATE_STATE64 State,
+ IN PCONTEXT Context
+);
+
+VOID
+NTAPI
+KdpSetContextState(
+ IN PDBGKD_WAIT_STATE_CHANGE64 WaitStateChange,
+ IN PCONTEXT Context
+);
+
+//
+// MSR
+//
+NTSTATUS
+NTAPI
+KdpSysReadMsr(
+ IN ULONG Msr,
+ OUT PLARGE_INTEGER MsrValue
+);
+
+NTSTATUS
+NTAPI
+KdpSysWriteMsr(
+ IN ULONG Msr,
+ IN PLARGE_INTEGER MsrValue
+);
+
+//
+// Bus
+//
+NTSTATUS
+NTAPI
+KdpSysReadBusData(
+ IN ULONG BusDataType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length,
+ OUT PULONG ActualLength
+);
+
+NTSTATUS
+NTAPI
+KdpSysWriteBusData(
+ IN ULONG BusDataType,
+ IN ULONG BusNumber,
+ IN ULONG SlotNumber,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length,
+ OUT PULONG ActualLength
+);
+
+//
+// Control Space
+//
+NTSTATUS
+NTAPI
+KdpSysReadControlSpace(
+ IN ULONG Processor,
+ IN ULONG64 BaseAddress,
+ IN PVOID Buffer,
+ IN ULONG Length,
+ OUT PULONG ActualLength
+);
+
+NTSTATUS
+NTAPI
+KdpSysWriteControlSpace(
+ IN ULONG Processor,
+ IN ULONG64 BaseAddress,
+ IN PVOID Buffer,
+ IN ULONG Length,
+ OUT PULONG ActualLength
+);
+
+//
+// I/O Space
+//
+NTSTATUS
+NTAPI
+KdpSysReadIoSpace(
+ IN ULONG InterfaceType,
+ IN ULONG BusNumber,
+ IN ULONG AddressSpace,
+ IN ULONG64 IoAddress,
+ IN PVOID DataValue,
+ IN ULONG DataSize,
+ OUT PULONG ActualDataSize
+);
+
+NTSTATUS
+NTAPI
+KdpSysWriteIoSpace(
+ IN ULONG InterfaceType,
+ IN ULONG BusNumber,
+ IN ULONG AddressSpace,
+ IN ULONG64 IoAddress,
+ IN PVOID DataValue,
+ IN ULONG DataSize,
+ OUT PULONG ActualDataSize
+);
+
+//
+// Low Memory
+//
+NTSTATUS
+NTAPI
+KdpSysCheckLowMemory(
+ IN ULONG Flags
+);
+
+//
+// Internal routine for sending strings directly to the debugger
+//
+VOID
+__cdecl
+KdpDprintf(
+ IN PCHAR Format,
+ ...
+);
+
+//
+// Global KD Data
+//
+extern DBGKD_GET_VERSION64 KdVersionBlock;
+extern KDDEBUGGER_DATA64 KdDebuggerDataBlock;
+extern LIST_ENTRY KdpDebuggerDataListHead;
+extern KSPIN_LOCK KdpDataSpinLock;
+extern LARGE_INTEGER KdPerformanceCounterRate;
+extern LARGE_INTEGER KdTimerStart;
+extern ULONG KdDisableCount;
+extern KD_CONTEXT KdpContext;
+extern PKDEBUG_ROUTINE KiDebugRoutine;
+extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;
+extern BOOLEAN KdBreakAfterSymbolLoad;
+extern BOOLEAN KdPitchDebugger;
+extern BOOLEAN _KdDebuggerNotPresent;
+extern BOOLEAN _KdDebuggerEnabled;
+extern BOOLEAN KdAutoEnableOnEvent;
+extern BOOLEAN KdPreviouslyEnabled;
+extern BOOLEAN KdpDebuggerStructuresInitialized;
+extern BOOLEAN KdEnteredDebugger;
+extern KDPC KdpTimeSlipDpc;
+extern KTIMER KdpTimeSlipTimer;
+extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem;
+extern LONG KdpTimeSlipPending;
+extern PKEVENT KdpTimeSlipEvent;
+extern KSPIN_LOCK KdpTimeSlipEventLock;
+extern BOOLEAN KdpPortLocked;
+extern BOOLEAN KdpControlCPressed;
+extern KSPIN_LOCK KdpDebuggerLock;
+extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;
+extern ULONG KdComponentTableSize;
+extern ULONG Kd_WIN2000_Mask;
+extern PULONG KdComponentTable[104];
+extern CHAR KdpMessageBuffer[4096], KdpPathBuffer[4096];
+extern BREAKPOINT_ENTRY KdpBreakpointTable[KD_BREAKPOINT_MAX];
+extern KD_BREAKPOINT_TYPE KdpBreakpointInstruction;
+extern BOOLEAN KdpOweBreakpoint;
+extern BOOLEAN BreakpointsSuspended;
+extern ULONG KdpNumInternalBreakpoints;
+extern ULONG KdpCurrentSymbolStart, KdpCurrentSymbolEnd;
+extern ULONG TraceDataBuffer[40];
+extern ULONG TraceDataBufferPosition;