You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
339 lines
6.5 KiB
339 lines
6.5 KiB
/*++ 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;
|
|
extern BOOLEAN KdAutoEnableOnEvent;
|
|
extern BOOLEAN KdIgnoreUmExceptions;
|
|
|
|
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
|
|
|
|
NTSTATUS
|
|
KdDisableDebugger(
|
|
VOID
|
|
);
|
|
|
|
NTSTATUS
|
|
KdEnableDebugger(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// KdRefreshDebuggerPresent attempts to communicate with
|
|
// the debugger host machine to refresh the state of
|
|
// KdDebuggerNotPresent. It returns the state of
|
|
// KdDebuggerNotPresent while the kd locks are held.
|
|
// KdDebuggerNotPresent may immediately change state
|
|
// after the kd locks are released so it may not
|
|
// match the return value.
|
|
//
|
|
|
|
BOOLEAN
|
|
KdRefreshDebuggerNotPresent(
|
|
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 KDPRINTDEFAULTBUFFERSIZE 32768
|
|
#else
|
|
#define KDPRINTDEFAULTBUFFERSIZE 4096
|
|
#endif
|
|
|
|
extern ULONG KdPrintBufferSize;
|
|
|
|
VOID
|
|
KdLogDbgPrint(
|
|
IN PSTRING String
|
|
);
|
|
|
|
NTSTATUS
|
|
KdSetDbgPrintBufferSize(
|
|
IN ULONG Size
|
|
);
|
|
|
|
|
|
__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_
|