Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151/* * COPYRIGHT: GPL, see COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: drivers/base/kdvm/kdvm.h * PURPOSE: Base definitions for the kernel debugger. * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) */
#ifndef _KDDLL_H_#define _KDDLL_H_
#define NOEXTAPI#include <ntifs.h>#include <windbgkd.h>#include <arc/arc.h>
#undef RtlEqualMemory#define RtlEqualMemory(dst, src, len) (RtlCompareMemory((dst), (src), (len)) == (len))
//#define KDDEBUG /* uncomment to enable debugging this dll */
typedef ULONG (*PFNDBGPRNT)(const char *Format, ...);extern PFNDBGPRNT KdpDbgPrint;
#ifndef KDDEBUG#define KDDBGPRINT(...)#else#define KDDBGPRINT KdpDbgPrint#endif
#define KDRPC_PROTOCOL_VERSION 0x101#define CONNECTION_TEST_ROUNDS 2 /*100*/#define KDVM_BUFFER_SIZE (131072 + 1024)#define KDRPC_TEST_BUFFER_SIZE 512
extern UCHAR KdVmDataBuffer[KDVM_BUFFER_SIZE];extern PHYSICAL_ADDRESS KdVmBufferPhysicalAddress;extern ULONG KdVmBufferPos;
typedef enum{ KDP_PACKET_RECEIVED = 0, KDP_PACKET_TIMEOUT = 1, KDP_PACKET_RESEND = 2} KDP_STATUS;
typedef struct _KDVM_MARSHAL_STRING{ USHORT Length; USHORT MaximumLength;} KDVM_MARSHAL_STRING;
#pragma pack(push,1)typedef struct{ CHAR Magic[8]; UCHAR Command;} KDVM_CMD_HEADER;
typedef struct{ USHORT Id; CHAR Magic[9];} KDVM_RECEIVE_HEADER, *PKDVM_RECEIVE_HEADER;
typedef struct _KDVM_CONTEXT{ ULONG RetryCount; BOOLEAN BreakInRequested; UCHAR align;} KDVM_CONTEXT, *PKDVM_CONTEXT;
typedef struct{ struct { UCHAR KdDebuggerNotPresent : 1; UCHAR RetryKdSendPacket : 1; UCHAR KdDebuggerEnabledAvailable : 1; }; BOOLEAN KdDebuggerEnabled; USHORT Unused;} KDVM_SENDPACKET_INFO;
typedef struct _KDVM_SEND_PKT_REQUEST{ KDVM_MARSHAL_STRING MessageHeader; KDVM_MARSHAL_STRING MessageData; KDVM_CONTEXT KdContext; ULONG PacketType; ULONG HeaderSize; ULONG DataSize; KDVM_SENDPACKET_INFO Info;} KDVM_SEND_PKT_REQUEST, *PKDVM_SEND_PKT_REQUEST;
typedef struct _KDVM_SEND_PKT_RESULT{ UCHAR CommandType; KDVM_CONTEXT KdContext; KDVM_SENDPACKET_INFO Info;} KDVM_SEND_PKT_RESULT, *PKDVM_SEND_PKT_RESULT;
typedef struct{ ULONG PacketType; KDVM_SENDPACKET_INFO Info; KDVM_MARSHAL_STRING MessageHeader; KDVM_MARSHAL_STRING MessageData; KDVM_CONTEXT KdContext;} KDVM_RECV_PKT_REQUEST;
typedef struct{ UCHAR CommandType; KDVM_MARSHAL_STRING MessageHeader; KDVM_MARSHAL_STRING MessageData; KDVM_CONTEXT KdContext; KDP_STATUS KdStatus; ULONG FullSize; ULONG HeaderSize; ULONG DataSize; KDVM_SENDPACKET_INFO Info;} KDVM_RECV_PKT_RESULT, *PKDVM_RECV_PKT_RESULT;#pragma pack(pop)
VOIDNTAPIKdVmDbgDumpBuffer( _In_ PVOID Buffer, _In_ ULONG Size);
VOIDFASTCALLKdVmExchange( _In_ ULONG_PTR PhysicalAddress, _In_ SIZE_T BufferSize);
VOIDNTAPIKdVmPrepareBuffer( VOID);
VOIDNTAPIKdVmKdVmExchangeData( _Out_ PVOID* ReceiveData, _Out_ PULONG ReceiveDataSize);
#endif /* _KDDLL_H_ */