48 || (MessageData->Length <
sizeof(*
Context)))
51 KDDBGPRINT(
"ERROR: Received wrong packet from KD.\n");
73 MessageData->Length = 0;
98 KDDBGPRINT(
"BAD BAD BAD not manipulating state for sending context.\n");
121 KDDBGPRINT(
"Wrong message length %u.\n", MessageData->MaximumLength);
148 KDDBGPRINT(
"Exception 0x%08x in thread p%p.%p.\n",
179 switch (DebugIO->ApiNumber)
186 KDDBGPRINT(
"Unknown ApiNumber %u.\n", DebugIO->ApiNumber);
197 switch (
State->ApiNumber)
225 MessageData->Length = 0;
254 KDDBGPRINT(
"Wrong packet received after asking for data.\n");
309 KDDBGPRINT(
"First KD packet is not a state change!\n");
384 MessageData->Length = 1;
385 MessageData->Buffer[0] =
ignore ?
'i' :
'b';
399 KDDBGPRINT(
"We have a manipulate state handler.\n");
447 KDDBGPRINT(
"Unknown packet type %u.\n", PacketType);
DBGKD_ANY_WAIT_STATE_CHANGE CurrentStateChange
KDSTATUS(* KDP_MANIPULATESTATE_HANDLER)(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
static KDSTATUS GetContextManipulateHandler(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
GCC_ULONG64 PsLoadedModuleList
#define DbgKdGetVersionApi
KDSTATUS gdb_send_registers(void)
static BOOLEAN InException
int ignore(int trapCode, ppc_trap_frame_t *trap)
#define handle_to_gdb_pid
struct _EPROCESS * PEPROCESS
static void send_kd_debug_io(_In_ DBGKD_DEBUG_IO *DebugIO, _In_ PSTRING String)
#define DbgKdExceptionStateChange
GCC_ULONG64 PsActiveProcessHead
VOID NTAPI KdSendPacket(IN ULONG PacketType, IN PSTRING MessageHeader, IN PSTRING MessageData, IN OUT PKD_CONTEXT KdContext)
KDSTATUS gdb_send_exception()
#define DbgKdGetStringApi
#define KdPacketNeedsResend
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define DbgKdPrintStringApi
KDP_STATUS NTAPI KdpPollBreakIn(VOID)
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
KDSTATUS gdb_send_debug_io(_In_ PSTRING String, _In_ BOOLEAN WithPrefix)
DBGKD_GET_VERSION64 KdVersion
KDDEBUGGER_DATA64 * KdDebuggerDataBlock
#define DbgKdLoadSymbolsStateChange
#define NT_SUCCESS(StatCode)
static VOID GetContextSendHandler(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
HANDLE NTAPI PsGetThreadProcessId(IN PETHREAD Thread)
#define DbgKdGetContextApi
KDP_SEND_HANDLER KdpSendPacketHandler
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
#define PACKET_TYPE_KD_STATE_MANIPULATE
VOID(* KDP_SEND_HANDLER)(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
static void send_kd_state_change(DBGKD_ANY_WAIT_STATE_CHANGE *StateChange)
EXCEPTION_RECORD64 ExceptionRecord
#define PACKET_TYPE_KD_STATE_CHANGE64
#define DbgKdSetContextApi
LIST_ENTRY * ProcessListHead
HANDLE NTAPI PsGetThreadId(IN PETHREAD Thread)
KDSTATUS SetContextManipulateHandler(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
static VOID GetVersionSendHandler(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
static KDSTATUS GetVersionManipulateStateHandler(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
static VOID FirstSendHandler(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
#define PACKET_TYPE_KD_DEBUG_IO
DBGKM_EXCEPTION64 Exception
LIST_ENTRY * ModuleListHead
static VOID SetContextSendHandler(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
KDSTATUS ContinueManipulateStateHandler(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
static void send_kd_state_manipulate(_In_ DBGKD_MANIPULATE_STATE64 *State, _In_ PSTRING MessageData)
FORCEINLINE UINT_PTR handle_to_gdb_tid(HANDLE Handle)
#define RtlCopyMemory(Destination, Source, Length)
struct _ETHREAD * PETHREAD
KDSTATUS NTAPI KdReceivePacket(_In_ ULONG PacketType, _Out_ PSTRING MessageHeader, _Out_ PSTRING MessageData, _Out_ PULONG DataLength, _Inout_ PKD_CONTEXT KdContext)
union _DBGKD_ANY_WAIT_STATE_CHANGE::@3499 u
KDP_MANIPULATESTATE_HANDLER KdpManipulateStateHandler
#define PACKET_TYPE_KD_POLL_BREAKIN