48 || (MessageData->Length <
sizeof(*
Context)))
50 KDDBGPRINT(
"ERROR: Received wrong packet from KD.\n");
73 MessageData->Length = 0;
98 KDDBGPRINT(
"BAD BAD BAD not manipulating state for sending context.\n");
122 KDDBGPRINT(
"Wrong message length %u.\n", MessageData->MaximumLength);
149 KDDBGPRINT(
"Exception 0x%08x in thread p%p.%p.\n",
180 switch (DebugIO->ApiNumber)
187 KDDBGPRINT(
"Unknown ApiNumber %u.\n", DebugIO->ApiNumber);
198 switch (
State->ApiNumber)
226 MessageData->Length = 0;
254 KDDBGPRINT(
"Wrong packet received after asking for data.\n");
303 KDDBGPRINT(
"First KD packet is not a state change!\n");
378 MessageData->Length = 1;
379 MessageData->Buffer[0] = ignore ?
'i' :
'b';
393 KDDBGPRINT(
"We have a manipulate state handler.\n");
441 KDDBGPRINT(
"Unknown packet type %u.\n", PacketType);
KDSTATUS gdb_send_registers(void)
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
#define NT_SUCCESS(StatCode)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
KDSTATUS gdb_send_debug_io(_In_ PSTRING String, _In_ BOOLEAN WithPrefix)
KDSTATUS gdb_send_exception()
KDP_STATUS NTAPI KdpPollBreakIn(VOID)
BOOLEAN(* KDP_SEND_HANDLER)(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
#define handle_to_gdb_pid
FORCEINLINE UINT_PTR handle_to_gdb_tid(HANDLE Handle)
KDSTATUS(* KDP_MANIPULATESTATE_HANDLER)(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
static BOOLEAN GetContextSendHandler(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
static void send_kd_debug_io(_In_ DBGKD_DEBUG_IO *DebugIO, _In_ PSTRING String)
KDP_SEND_HANDLER KdpSendPacketHandler
static BOOLEAN GetVersionSendHandler(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
KDP_MANIPULATESTATE_HANDLER KdpManipulateStateHandler
KDSTATUS SetContextManipulateHandler(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
VOID NTAPI KdSendPacket(IN ULONG PacketType, IN PSTRING MessageHeader, IN PSTRING MessageData, IN OUT PKD_CONTEXT KdContext)
DBGKD_GET_VERSION64 KdVersion
static void send_kd_state_manipulate(_In_ DBGKD_MANIPULATE_STATE64 *State, _In_ PSTRING MessageData)
DBGKD_ANY_WAIT_STATE_CHANGE CurrentStateChange
KDDEBUGGER_DATA64 * KdDebuggerDataBlock
static void send_kd_state_change(DBGKD_ANY_WAIT_STATE_CHANGE *StateChange)
static BOOLEAN FirstSendHandler(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
static KDSTATUS GetContextManipulateHandler(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
KDSTATUS ContinueManipulateStateHandler(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
LIST_ENTRY * ModuleListHead
static BOOLEAN InException
KDSTATUS NTAPI KdReceivePacket(_In_ ULONG PacketType, _Out_ PSTRING MessageHeader, _Out_ PSTRING MessageData, _Out_ PULONG DataLength, _Inout_ PKD_CONTEXT KdContext)
LIST_ENTRY * ProcessListHead
static KDSTATUS GetVersionManipulateStateHandler(_Out_ DBGKD_MANIPULATE_STATE64 *State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext)
static BOOLEAN SetContextSendHandler(_In_ ULONG PacketType, _In_ PSTRING MessageHeader, _In_ PSTRING MessageData)
struct _EPROCESS * PEPROCESS
struct _ETHREAD * PETHREAD
HANDLE NTAPI PsGetThreadId(IN PETHREAD Thread)
HANDLE NTAPI PsGetThreadProcessId(IN PETHREAD Thread)
#define KdPacketNeedsResend
union _DBGKD_ANY_WAIT_STATE_CHANGE::@3561 u
DBGKM_EXCEPTION64 Exception
EXCEPTION_RECORD64 ExceptionRecord
ULPTR64 PsActiveProcessHead
ULPTR64 PsLoadedModuleList
#define RtlCopyMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
#define DbgKdGetVersionApi
#define DbgKdGetContextApi
#define DbgKdLoadSymbolsStateChange
#define DbgKdPrintStringApi
#define DbgKdSetContextApi
#define PACKET_TYPE_KD_STATE_MANIPULATE
#define DbgKdGetStringApi
#define DbgKdExceptionStateChange
#define PACKET_TYPE_KD_STATE_CHANGE64
#define PACKET_TYPE_KD_POLL_BREAKIN
#define PACKET_TYPE_KD_DEBUG_IO