/*++ BUILD Version: 0006 // Increment this if a change has global effects Copyright (c) 1989 Microsoft Corporation Module Name: kd.h Abstract: This module contains the public data structures and procedure prototypes for the Kernel Debugger sub-component of NTOS. Author: Mike O'Leary (mikeol) 29-June-1989 Revision History: --*/ #ifndef _KD_ #define _KD_ // begin_nthal // // Define the number of debugging devices we support // #define MAX_DEBUGGING_DEVICES_SUPPORTED 2 // // Status Constants for reading data from comport // #define CP_GET_SUCCESS 0 #define CP_GET_NODATA 1 #define CP_GET_ERROR 2 // end_nthal // // Debug constants for FreezeFlag // #define FREEZE_BACKUP 0x0001 #define FREEZE_SKIPPED_PROCESSOR 0x0002 #define FREEZE_FROZEN 0x0004 // // System Initialization procedure for KD subcomponent of NTOS // BOOLEAN KdInitSystem( IN ULONG Phase, IN PLOADER_PARAMETER_BLOCK LoaderBlock ); BOOLEAN KdEnterDebugger( IN PKTRAP_FRAME TrapFrame, IN PKEXCEPTION_FRAME ExceptionFrame ); VOID KdExitDebugger( IN BOOLEAN Enable ); extern BOOLEAN KdPitchDebugger; BOOLEAN KdPollBreakIn ( VOID ); BOOLEAN KdIsThisAKdTrap ( IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT ContextRecord, IN KPROCESSOR_MODE PreviousMode ); VOID KdSetOwedBreakpoints( VOID ); VOID KdDeleteAllBreakpoints( VOID ); // // Data structure for passing information to KdpReportLoadSymbolsStateChange // function via the debug trap // typedef struct _KD_SYMBOLS_INFO { IN PVOID BaseOfDll; IN ULONG_PTR ProcessId; IN ULONG CheckSum; IN ULONG SizeOfImage; } KD_SYMBOLS_INFO, *PKD_SYMBOLS_INFO; // begin_nthal // // Defines the debug port parameters for kernel debugger // CommunicationPort - specify which COM port to use as debugging port // 0 - use default; N - use COM N. // BaudRate - the baud rate used to initialize debugging port // 0 - use default rate. // typedef struct _DEBUG_PARAMETERS { ULONG CommunicationPort; ULONG BaudRate; } DEBUG_PARAMETERS, *PDEBUG_PARAMETERS; // end_nthal // begin_ntddk begin_wdm begin_nthal begin_ntifs begin_ntosp // // Define external data. // because of indirection for all drivers external to ntoskrnl these are actually ptrs // #if defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) extern PBOOLEAN KdDebuggerNotPresent; extern PBOOLEAN KdDebuggerEnabled; #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent #else extern BOOLEAN KdDebuggerNotPresent; extern BOOLEAN KdDebuggerEnabled; #define KD_DEBUGGER_ENABLED KdDebuggerEnabled #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent #endif // end_ntddk end_wdm end_nthal end_ntifs end_ntosp extern DEBUG_PARAMETERS KdDebugParameters; // // This event is provided by the time service. The debugger // signals the event when the system time has slipped due // to debugger activity. // VOID KdUpdateTimeSlipEvent( PVOID Event ); // // Let PS update data in the KdDebuggerDataBlock // VOID KdUpdateDataBlock(VOID); ULONG_PTR KdGetDataBlock(VOID); // begin_ntddk begin_wdm begin_nthal begin_ntifs VOID KdDisableDebugger( VOID ); VOID KdEnableDebugger( VOID ); // end_ntddk end_wdm end_nthal end_ntifs NTSTATUS KdPowerTransition( IN DEVICE_POWER_STATE newDeviceState ); // // DbgPrint strings will always be logged to a circular buffer. This // function may be called directly by the debugger service trap handler // even when the debugger is not enabled. // #if DBG #define KDPRINTBUFFERSIZE 32768 #else #define KDPRINTBUFFERSIZE 4096 #endif VOID KdLogDbgPrint( IN PSTRING String ); __inline VOID KdCheckForDebugBreak( VOID ) /*++ Routine Description: If necessary, poll for a request to break-in from the debugger. This function should be called by routines that run at an IRQL above clock level that want to be broken in by CTRL-C requests from the debugger. Crashdump and hiber, for example, run at HIGH_LEVEL and explicitly need to poll for breaking. Arguments: None. Return Value: None. --*/ { if (KdDebuggerEnabled && KdPollBreakIn()) { DbgBreakPointWithStatus (DBG_STATUS_CONTROL_C); } } // // Global debug print filter mask. // extern ULONG Kd_WIN2000_Mask; // // Allow raw tracing data to be exported to the host // over the kd protocol. // VOID KdReportTraceData( IN struct _WMI_BUFFER_HEADER* Buffer, IN PVOID Context ); // // Allow file I/O for files on the kd host machine. // All pointers must refer to nonpaged memory. // NTSTATUS KdCreateRemoteFile( OUT PHANDLE Handle, OUT PULONG64 Length, OPTIONAL IN PUNICODE_STRING FileName, IN ACCESS_MASK DesiredAccess, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions ); NTSTATUS KdReadRemoteFile( IN HANDLE Handle, IN ULONG64 Offset, OUT PVOID Buffer, IN ULONG Length, OUT PULONG Completed ); NTSTATUS KdWriteRemoteFile( IN HANDLE Handle, IN ULONG64 Offset, IN PVOID Buffer, IN ULONG Length, OUT PULONG Completed ); NTSTATUS KdCloseRemoteFile( IN HANDLE Handle ); NTSTATUS KdPullRemoteFile( IN PUNICODE_STRING FileName, IN ULONG FileAttributes, IN ULONG CreateDisposition, IN ULONG CreateOptions ); NTSTATUS KdPushRemoteFile( IN PUNICODE_STRING FileName, IN ULONG FileAttributes, IN ULONG CreateDisposition, IN ULONG CreateOptions ); #endif // _KD_