diff --git a/reactos/ntoskrnl/include/internal/kd64.h b/reactos/ntoskrnl/include/internal/kd64.h new file mode 100644 index 00000000000..a4de84dd244 --- /dev/null +++ b/reactos/ntoskrnl/include/internal/kd64.h @@ -0,0 +1,265 @@ +/* + * 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) + */ + +// +// 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; + UCHAR 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 +); + +// +// Debug and Multi-Processor Switch Routines +// +BOOLEAN +NTAPI +KdpEnterDebuggerException( + IN PKTRAP_FRAME TrapFrame, + IN PKEXCEPTION_FRAME ExceptionFrame, + IN PEXCEPTION_RECORD ExceptionRecord, + IN PCONTEXT Context, + IN KPROCESSOR_MODE PreviousMode, + IN BOOLEAN SecondChance +); + +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 +// +ULONG +NTAPI +KdpPrint( + IN ULONG ComponentId, + IN ULONG ComponentMask, + IN LPSTR String, + IN ULONG Length, + IN KPROCESSOR_MODE PreviousMode, + IN PKTRAP_FRAME TrapFrame, + IN PKEXCEPTION_FRAME ExceptionFrame, + OUT PBOOLEAN Status +); + +ULONG +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 +); + +// +// 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 +); + +// +// 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 KdpControlCPressed; +extern BOOLEAN KdpControlCWaiting; +extern BOOLEAN KdpPortLocked; +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[20]; +extern ULONG KdpBreakpointInstruction; +extern BOOLEAN KdpOweBreakpoint; +extern BOOLEAN BreakpointsSuspended; +extern ULONG KdpNumInternalBreakpoints; +extern ULONG KdpCurrentSymbolStart, KdpCurrentSymbolEnd; diff --git a/reactos/ntoskrnl/include/internal/ntoskrnl.h b/reactos/ntoskrnl/include/internal/ntoskrnl.h index a05ba07d342..e2d9f57af96 100644 --- a/reactos/ntoskrnl/include/internal/ntoskrnl.h +++ b/reactos/ntoskrnl/include/internal/ntoskrnl.h @@ -36,7 +36,11 @@ #include "po.h" #include "se.h" #include "ldr.h" +#ifndef _WINKD_ #include "kd.h" +#else +#include "kd64.h" +#endif #include "fsrtl.h" #include "lpc.h" #include "rtl.h" diff --git a/reactos/ntoskrnl/include/ntoskrnl.h b/reactos/ntoskrnl/include/ntoskrnl.h index d38075640df..a8f3a0cbcd1 100644 --- a/reactos/ntoskrnl/include/ntoskrnl.h +++ b/reactos/ntoskrnl/include/ntoskrnl.h @@ -50,7 +50,6 @@ #include #define ExRaiseStatus RtlRaiseStatus #include -#include /* SetupLDR Support */ #include @@ -59,6 +58,9 @@ #include #include #include +#ifndef _WINKD_ +#include +#endif /* PNP GUIDs */ #include diff --git a/reactos/ntoskrnl/kd/kdmain.c b/reactos/ntoskrnl/kd/kdmain.c index 012d8a6b5d8..b70e9f06f41 100644 --- a/reactos/ntoskrnl/kd/kdmain.c +++ b/reactos/ntoskrnl/kd/kdmain.c @@ -328,6 +328,9 @@ NtSetDebugFilterState(IN ULONG ComponentId, return STATUS_SUCCESS; } +/* + * @unimplemented + */ NTSTATUS NTAPI KdSystemDebugControl(IN SYSDBG_COMMAND Command, diff --git a/reactos/ntoskrnl/kd64/kdapi.c b/reactos/ntoskrnl/kd64/kdapi.c index 0bbce23a38c..d1946b72268 100644 --- a/reactos/ntoskrnl/kd64/kdapi.c +++ b/reactos/ntoskrnl/kd64/kdapi.c @@ -1156,3 +1156,37 @@ KdEnableDebugger(VOID) return KdEnableDebuggerWithLock(TRUE); } +/* +* @unimplemented +*/ +NTSTATUS +NTAPI +KdSystemDebugControl(IN SYSDBG_COMMAND Command, + IN PVOID InputBuffer, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer, + IN ULONG OutputBufferLength, + IN OUT PULONG ReturnLength, + IN KPROCESSOR_MODE PreviousMode) +{ + /* HACK */ + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +NtQueryDebugFilterState(ULONG ComponentId, + ULONG Level) +{ + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +NtSetDebugFilterState(ULONG ComponentId, + ULONG Level, + BOOLEAN State) +{ + return STATUS_SUCCESS; +} +