+++ /dev/null
-/*
- * PROJECT: ReactOS Kernel
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: ntoskrnl/include/internal/kd64.h
- * PURPOSE: Internal header for the KD64 Library
- * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-//
-// Default size of the DbgPrint log buffer
-//
-#if DBG
-#define KD_DEFAULT_LOG_BUFFER_SIZE 0x8000
-#else
-#define KD_DEFAULT_LOG_BUFFER_SIZE 0x1000
-#endif
-
-//
-// Maximum supported number of breakpoints
-//
-#define KD_BREAKPOINT_MAX 32
-
-//
-// Highest limit starting which we consider that breakpoint addresses
-// are either in system space, or in user space but inside shared DLLs.
-//
-// I'm wondering whether this can be computed using MmHighestUserAddress
-// or whether there is already some #define somewhere else...
-// See http://www.drdobbs.com/windows/faster-dll-load-load/184416918
-// and http://www.drdobbs.com/rebasing-win32-dlls/184416272
-// for a tentative explanation.
-//
-#define KD_HIGHEST_USER_BREAKPOINT_ADDRESS (PVOID)0x60000000 // MmHighestUserAddress
-
-//
-// Breakpoint Status Flags
-//
-#define KD_BREAKPOINT_ACTIVE 0x01
-#define KD_BREAKPOINT_PENDING 0x02
-#define KD_BREAKPOINT_SUSPENDED 0x04
-#define KD_BREAKPOINT_EXPIRED 0x08
-
-//
-// Structure for Breakpoints
-//
-typedef struct _BREAKPOINT_ENTRY
-{
- ULONG Flags;
- ULONG_PTR DirectoryTableBase;
- 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
-);
-
-//
-// Determines if the kernel debugger must handle a particular trap
-//
-BOOLEAN
-NTAPI
-KdIsThisAKdTrap(
- IN PEXCEPTION_RECORD ExceptionRecord,
- IN PCONTEXT Context,
- IN KPROCESSOR_MODE PreviousMode
-);
-
-//
-// 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 Enter, Exit, Enable and Disable
-//
-BOOLEAN
-NTAPI
-KdEnterDebugger(
- IN PKTRAP_FRAME TrapFrame,
- IN PKEXCEPTION_FRAME ExceptionFrame
-);
-
-VOID
-NTAPI
-KdExitDebugger(
- IN BOOLEAN Enable
-);
-
-NTSTATUS
-NTAPI
-KdEnableDebuggerWithLock(
- IN BOOLEAN NeedLock
-);
-
-NTSTATUS
-NTAPI
-KdDisableDebuggerWithLock(
- IN BOOLEAN NeedLock
-);
-
-//
-// Debug Event Handlers
-//
-NTSTATUS
-NTAPI
-KdpPrint(
- IN ULONG ComponentId,
- IN ULONG Level,
- IN LPSTR String,
- IN USHORT Length,
- IN KPROCESSOR_MODE PreviousMode,
- IN PKTRAP_FRAME TrapFrame,
- IN PKEXCEPTION_FRAME ExceptionFrame,
- OUT PBOOLEAN Handled
-);
-
-USHORT
-NTAPI
-KdpPrompt(
- IN LPSTR PromptString,
- IN USHORT PromptLength,
- OUT LPSTR ResponseString,
- IN USHORT MaximumResponseLength,
- IN KPROCESSOR_MODE PreviousMode,
- IN PKTRAP_FRAME TrapFrame,
- IN PKEXCEPTION_FRAME ExceptionFrame
-);
-
-VOID
-NTAPI
-KdpSymbol(
- IN PSTRING DllPath,
- IN PKD_SYMBOLS_INFO SymbolInfo,
- IN BOOLEAN Unload,
- IN KPROCESSOR_MODE PreviousMode,
- IN PCONTEXT ContextRecord,
- IN PKTRAP_FRAME TrapFrame,
- IN PKEXCEPTION_FRAME ExceptionFrame
-);
-
-VOID
-NTAPI
-KdpCommandString(
- IN PSTRING NameString,
- IN PSTRING CommandString,
- IN KPROCESSOR_MODE PreviousMode,
- IN PCONTEXT ContextRecord,
- IN PKTRAP_FRAME TrapFrame,
- IN PKEXCEPTION_FRAME ExceptionFrame
-);
-
-//
-// State Change Notifications
-//
-VOID
-NTAPI
-KdpReportLoadSymbolsStateChange(
- IN PSTRING PathName,
- IN PKD_SYMBOLS_INFO SymbolInfo,
- IN BOOLEAN Unload,
- IN OUT PCONTEXT Context
-);
-
-VOID
-NTAPI
-KdpReportCommandStringStateChange(
- IN PSTRING NameString,
- IN PSTRING CommandString,
- IN OUT PCONTEXT Context
-);
-
-BOOLEAN
-NTAPI
-KdpReportExceptionStateChange(
- IN PEXCEPTION_RECORD ExceptionRecord,
- IN OUT PCONTEXT Context,
- IN BOOLEAN SecondChanceException
-);
-
-//
-// Breakpoint Support
-//
-ULONG
-NTAPI
-KdpAddBreakpoint(
- IN PVOID Address
-);
-
-VOID
-NTAPI
-KdSetOwedBreakpoints(
- VOID
-);
-
-BOOLEAN
-NTAPI
-KdpDeleteBreakpoint(
- IN ULONG BpEntry
-);
-
-BOOLEAN
-NTAPI
-KdpDeleteBreakpointRange(
- IN PVOID Base,
- IN PVOID Limit
-);
-
-VOID
-NTAPI
-KdpSuspendBreakPoint(
- IN ULONG BpEntry
-);
-
-VOID
-NTAPI
-KdpRestoreAllBreakpoints(
- VOID
-);
-
-VOID
-NTAPI
-KdpSuspendAllBreakPoints(
- VOID
-);
-
-//
-// Routine to determine if it is safe to disable the debugger
-//
-NTSTATUS
-NTAPI
-KdpAllowDisable(
- VOID
-);
-
-//
-// Safe memory read & write Support
-//
-NTSTATUS
-NTAPI
-KdpCopyMemoryChunks(
- IN ULONG64 Address,
- IN PVOID Buffer,
- IN ULONG TotalSize,
- IN ULONG ChunkSize,
- IN ULONG Flags,
- OUT PULONG ActualSize OPTIONAL
-);
-
-//
-// Internal memory handling routines for KD isolation
-//
-VOID
-NTAPI
-KdpMoveMemory(
- IN PVOID Destination,
- IN PVOID Source,
- IN SIZE_T Length
-);
-
-VOID
-NTAPI
-KdpZeroMemory(
- IN PVOID Destination,
- IN SIZE_T Length
-);
-
-//
-// Low Level Support Routines for the KD API
-//
-
-//
-// 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_ANY_WAIT_STATE_CHANGE 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 ULONG Offset,
- IN PVOID Buffer,
- IN ULONG Length,
- OUT PULONG ActualLength
-);
-
-NTSTATUS
-NTAPI
-KdpSysWriteBusData(
- IN ULONG BusDataType,
- IN ULONG BusNumber,
- IN ULONG SlotNumber,
- IN ULONG Offset,
- IN PVOID Buffer,
- 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 KdAutoEnableOnEvent;
-extern BOOLEAN KdBlockEnable;
-extern BOOLEAN KdIgnoreUmExceptions;
-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 BOOLEAN KdpContextSent;
-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[0x1000], KdpPathBuffer[0x1000];
-extern CHAR KdPrintDefaultCircularBuffer[KD_DEFAULT_LOG_BUFFER_SIZE];
-extern BREAKPOINT_ENTRY KdpBreakpointTable[KD_BREAKPOINT_MAX];
-extern KD_BREAKPOINT_TYPE KdpBreakpointInstruction;
-extern BOOLEAN KdpOweBreakpoint;
-extern BOOLEAN BreakpointsSuspended;
-extern ULONG KdpNumInternalBreakpoints;
-extern ULONG_PTR KdpCurrentSymbolStart, KdpCurrentSymbolEnd;
-extern ULONG TraceDataBuffer[40];
-extern ULONG TraceDataBufferPosition;