Author: sginsberg
Date: Mon Jan 19 17:34:27 2009
New Revision: 38961
URL:
http://svn.reactos.org/svn/reactos?rev=38961&view=rev
Log:
- Add 32-bit versions to wdbgexts.h
- Add lots of missing definitions to windbgkd.h, gathered from Singularity, tinykrnl,
articles, blogs, etc
Modified:
trunk/reactos/include/psdk/wdbgexts.h
trunk/reactos/include/reactos/windbgkd.h
Modified: trunk/reactos/include/psdk/wdbgexts.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/wdbgexts.h?re…
==============================================================================
--- trunk/reactos/include/psdk/wdbgexts.h [iso-8859-1] (original)
+++ trunk/reactos/include/psdk/wdbgexts.h [iso-8859-1] Mon Jan 19 17:34:27 2009
@@ -21,6 +21,101 @@
#define DBGKD_VERS_FLAG_PARTITIONS 0x0020
#define KDBG_TAG TAG('K', 'D',
'B', 'G')
+
+typedef struct _DBGKD_GET_VERSION32
+{
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ USHORT ProtocolVersion;
+ USHORT Flags;
+ ULONG KernBase;
+ ULONG PsLoadedModuleList;
+ USHORT MachineType;
+ USHORT ThCallbackStack;
+ USHORT NextCallback;
+ USHORT FramePointer;
+ ULONG KiCallUserMode;
+ ULONG KeUserCallbackDispatcher;
+ ULONG BreakpointWithStatus;
+ ULONG DebuggerDataList;
+} DBGKD_GET_VERSION32, *PDBGKD_GET_VERSION32;
+
+typedef struct _DBGKD_DEBUG_DATA_HEADER32
+{
+ LIST_ENTRY32 List;
+ ULONG OwnerTag;
+ ULONG Size;
+} DBGKD_DEBUG_DATA_HEADER32, *PDBGKD_DEBUG_DATA_HEADER32;
+
+typedef struct _KDDEBUGGER_DATA32
+{
+ DBGKD_DEBUG_DATA_HEADER32 Header;
+ ULONG KernBase;
+ ULONG BreakpointWithStatus;
+ ULONG SavedContext;
+ USHORT ThCallbackStack;
+ USHORT NextCallback;
+ USHORT FramePointer;
+ USHORT PaeEnabled:1;
+ ULONG KiCallUserMode;
+ ULONG KeUserCallbackDispatcher;
+ ULONG PsLoadedModuleList;
+ ULONG PsActiveProcessHead;
+ ULONG PspCidTable;
+ ULONG ExpSystemResourcesList;
+ ULONG ExpPagedPoolDescriptor;
+ ULONG ExpNumberOfPagedPools;
+ ULONG KeTimeIncrement;
+ ULONG KeBugCheckCallbackListHead;
+ ULONG KiBugcheckData;
+ ULONG IopErrorLogListHead;
+ ULONG ObpRootDirectoryObject;
+ ULONG ObpTypeObjectType;
+ ULONG MmSystemCacheStart;
+ ULONG MmSystemCacheEnd;
+ ULONG MmSystemCacheWs;
+ ULONG MmPfnDatabase;
+ ULONG MmSystemPtesStart;
+ ULONG MmSystemPtesEnd;
+ ULONG MmSubsectionBase;
+ ULONG MmNumberOfPagingFiles;
+ ULONG MmLowestPhysicalPage;
+ ULONG MmHighestPhysicalPage;
+ ULONG MmNumberOfPhysicalPages;
+ ULONG MmMaximumNonPagedPoolInBytes;
+ ULONG MmNonPagedSystemStart;
+ ULONG MmNonPagedPoolStart;
+ ULONG MmNonPagedPoolEnd;
+ ULONG MmPagedPoolStart;
+ ULONG MmPagedPoolEnd;
+ ULONG MmPagedPoolInformation;
+ ULONG MmPageSize;
+ ULONG MmSizeOfPagedPoolInBytes;
+ ULONG MmTotalCommitLimit;
+ ULONG MmTotalCommittedPages;
+ ULONG MmSharedCommit;
+ ULONG MmDriverCommit;
+ ULONG MmProcessCommit;
+ ULONG MmPagedPoolCommit;
+ ULONG MmExtendedCommit;
+ ULONG MmZeroedPageListHead;
+ ULONG MmFreePageListHead;
+ ULONG MmStandbyPageListHead;
+ ULONG MmModifiedPageListHead;
+ ULONG MmModifiedNoWritePageListHead;
+ ULONG MmAvailablePages;
+ ULONG MmResidentAvailablePages;
+ ULONG PoolTrackTable;
+ ULONG NonPagedPoolDescriptor;
+ ULONG MmHighestUserAddress;
+ ULONG MmSystemRangeStart;
+ ULONG MmUserProbeAddress;
+ ULONG KdPrintCircularBuffer;
+ ULONG KdPrintCircularBufferEnd;
+ ULONG KdPrintWritePointer;
+ ULONG KdPrintRolloverCount;
+ ULONG MmLoadedUserImageList;
+} KDDEBUGGER_DATA32, *PKDDEBUGGER_DATA32;
typedef struct _DBGKD_GET_VERSION64
{
Modified: trunk/reactos/include/reactos/windbgkd.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/windbgkd.h…
==============================================================================
--- trunk/reactos/include/reactos/windbgkd.h [iso-8859-1] (original)
+++ trunk/reactos/include/reactos/windbgkd.h [iso-8859-1] Mon Jan 19 17:34:27 2009
@@ -60,6 +60,12 @@
#define DbgKdLoadSymbolsStateChange 0x00003031
#define DbgKdCommandStringStateChange 0x00003032
#define DbgKdMaximumStateChange 0x00003033
+
+//
+// This is combined with the basic state change code
+// if the state is from an alternate source
+//
+#define DbgKdAlternateStateChange 0x00010000
//
// Manipulate Types
@@ -114,6 +120,25 @@
#define DbgKdGetStringApi 0x00003231
//
+// Trace I/O Types
+//
+#define DbgKdPrintTraceApi 0x00003330
+
+//
+// Control Request Types
+//
+#define DbgKdRequestHardwareBp 0x00004300
+#define DbgKdReleaseHardwareBp 0x00004301
+
+//
+// File I/O Types
+//
+#define DbgKdCreateFileApi 0x00003430
+#define DbgKdReadFileApi 0x00003431
+#define DbgKdWriteFileApi 0x00003432
+#define DbgKdCloseFileApi 0x00003433
+
+//
// Control Report Flags
//
#define REPORT_INCLUDES_SEGS 0x0001
@@ -140,6 +165,34 @@
#define DBGKD_QUERY_MEMORY_WRITE 0x02
#define DBGKD_QUERY_MEMORY_EXECUTE 0x04
#define DBGKD_QUERY_MEMORY_FIXED 0x08
+
+//
+// Internal Breakpoint Flags
+//
+#define DBGKD_INTERNAL_BP_FLAG_COUNTONLY 0x01
+#define DBGKD_INTERNAL_BP_FLAG_INVALID 0x02
+#define DBGKD_INTERNAL_BP_FLAG_SUSPENDED 0x04
+#define DBGKD_INTERNAL_BP_FLAG_DYING 0x08
+
+//
+// Fill Memory Flags
+//
+#define DBGKD_FILL_MEMORY_VIRTUAL 0x01
+#define DBGKD_FILL_MEMORY_PHYSICAL 0x002
+
+//
+// Physical Memory Caching Flags
+//
+#define DBGKD_CACHING_DEFAULT 0
+#define DBGKD_CACHING_CACHED 1
+#define DBGKD_CACHING_UNCACHED 2
+#define DBGKD_CACHING_WRITE_COMBINED 3
+
+//
+// Partition Switch Flags
+//
+#define DBGKD_PARTITION_DEFAULT 0x00
+#define DBGKD_PARTITION_ALTERNATE 0x01
//
// KD Packet Structure
@@ -189,6 +242,13 @@
ULONG64 CurrentSymbolEnd;
} AMD64_DBGKD_CONTROL_SET, *PAMD64_DBGKD_CONTROL_SET;
+typedef struct _ARM_DBGKD_CONTROL_SET
+{
+ ULONG Continue;
+ ULONG CurrentSymbolStart;
+ ULONG CurrentSymbolEnd;
+} ARM_DBGKD_CONTROL_SET, *PARM_DBGKD_CONTROL_SET;
+
typedef struct _DBGKD_ANY_CONTROL_SET
{
union
@@ -196,15 +256,22 @@
X86_DBGKD_CONTROL_SET X86ControlSet;
IA64_DBGKD_CONTROL_SET IA64ControlSet;
AMD64_DBGKD_CONTROL_SET Amd64ControlSet;
+ ARM_DBGKD_CONTROL_SET ArmControlSet;
};
} DBGKD_ANY_CONTROL_SET, *PDBGKD_ANY_CONTROL_SET;
#include <poppack.h>
-typedef X86_DBGKD_CONTROL_SET DBGKD_CONTROL_SET;
+typedef X86_DBGKD_CONTROL_SET DBGKD_CONTROL_SET, *PDBGKD_CONTROL_SET;
//
// DBGKM Structure for Exceptions
//
+typedef struct _DBGKM_EXCEPTION32
+{
+ EXCEPTION_RECORD32 ExceptionRecord;
+ ULONG FirstChance;
+} DBGKM_EXCEPTION32, *PDBGKM_EXCEPTION32;
+
typedef struct _DBGKM_EXCEPTION64
{
EXCEPTION_RECORD64 ExceptionRecord;
@@ -214,10 +281,37 @@
//
// DBGKD Structure for State Change
//
-typedef struct _DBGKD_CONTROL_REPORT
-{
- ULONG Dr6;
- ULONG Dr7;
+typedef struct _X86_DBGKD_CONTROL_REPORT
+{
+ ULONG Dr6;
+ ULONG Dr7;
+ USHORT InstructionCount;
+ USHORT ReportFlags;
+ UCHAR InstructionStream[DBGKD_MAXSTREAM];
+ USHORT SegCs;
+ USHORT SegDs;
+ USHORT SegEs;
+ USHORT SegFs;
+ ULONG EFlags;
+} X86_DBGKD_CONTROL_REPORT, *PX86_DBGKD_CONTROL_REPORT;
+
+typedef struct _ALPHA_DBGKD_CONTROL_REPORT
+{
+ ULONG InstructionCount;
+ UCHAR InstructionStream[DBGKD_MAXSTREAM];
+} ALPHA_DBGKD_CONTROL_REPORT, *PALPHA_DBGKD_CONTROL_REPORT;
+
+typedef struct _IA64_DBGKD_CONTROL_REPORT
+{
+ ULONG InstructionCount;
+ UCHAR InstructionStream[DBGKD_MAXSTREAM];
+} IA64_DBGKD_CONTROL_REPORT, *PIA64_DBGKD_CONTROL_REPORT;
+
+typedef struct _AMD64_DBGKD_CONTROL_REPORT
+{
+ ULONG64 Dr6;
+ ULONG64 Dr7;
+ ULONG EFlags;
USHORT InstructionCount;
USHORT ReportFlags;
UCHAR InstructionStream[DBGKD_MAXSTREAM];
@@ -225,8 +319,20 @@
USHORT SegDs;
USHORT SegEs;
USHORT SegFs;
- ULONG EFlags;
-} DBGKD_CONTROL_REPORT, *PDBGKD_CONTROL_REPORT;
+} AMD64_DBGKD_CONTROL_REPORT, *PAMD64_DBGKD_CONTROL_REPORT;
+
+typedef X86_DBGKD_CONTROL_REPORT DBGKD_CONTROL_REPORT;
+
+typedef struct _DBGKD_ANY_CONTROL_REPORT
+{
+ union
+ {
+ X86_DBGKD_CONTROL_REPORT X86ControlReport;
+ ALPHA_DBGKD_CONTROL_REPORT AlphaControlReport;
+ IA64_DBGKD_CONTROL_REPORT IA64ControlReport;
+ AMD64_DBGKD_CONTROL_REPORT Amd64ControlReport;
+ };
+} DBGKD_ANY_CONTROL_REPORT, *PDBGKD_ANY_CONTROL_REPORT;
//
// DBGKD Structure for Debug I/O Type Print String
@@ -261,8 +367,28 @@
} DBGKD_DEBUG_IO, *PDBGKD_DEBUG_IO;
//
+// DBGkD Structure for Command String
+//
+typedef struct _DBGKD_COMMAND_STRING
+{
+ ULONG Flags;
+ ULONG Reserved1;
+ ULONG64 Reserved2[7];
+} DBGKD_COMMAND_STRING, *PDBGKD_COMMAND_STRING;
+
+//
// DBGKD Structure for Load Symbols
//
+typedef struct _DBGKD_LOAD_SYMBOLS32
+{
+ ULONG PathNameLength;
+ ULONG BaseOfDll;
+ ULONG ProcessId;
+ ULONG CheckSum;
+ ULONG SizeOfImage;
+ BOOLEAN UnloadSymbols;
+} DBGKD_LOAD_SYMBOLS32, *PDBGKD_LOAD_SYMBOLS32;
+
typedef struct _DBGKD_LOAD_SYMBOLS64
{
ULONG PathNameLength;
@@ -276,6 +402,24 @@
//
// DBGKD Structure for Wait State Change
//
+
+typedef struct _DBGKD_WAIT_STATE_CHANGE32
+{
+ ULONG NewState;
+ USHORT ProcessorLevel;
+ USHORT Processor;
+ ULONG NumberProcessors;
+ ULONG Thread;
+ ULONG ProgramCounter;
+ union
+ {
+ DBGKM_EXCEPTION32 Exception;
+ DBGKD_LOAD_SYMBOLS32 LoadSymbols;
+ } u;
+ DBGKD_CONTROL_REPORT ControlReport;
+ CONTEXT Context;
+} DBGKD_WAIT_STATE_CHANGE32, *PDBGKD_WAIT_STATE_CHANGE32;
+
typedef struct _DBGKD_WAIT_STATE_CHANGE64
{
ULONG NewState;
@@ -293,9 +437,37 @@
CONTEXT Context;
} DBGKD_WAIT_STATE_CHANGE64, *PDBGKD_WAIT_STATE_CHANGE64;
+typedef struct _DBGKD_ANY_WAIT_STATE_CHANGE
+{
+ ULONG NewState;
+ USHORT ProcessorLevel;
+ USHORT Processor;
+ ULONG NumberProcessors;
+ ULONG64 Thread;
+ ULONG64 ProgramCounter;
+ union
+ {
+ DBGKM_EXCEPTION64 Exception;
+ DBGKD_LOAD_SYMBOLS64 LoadSymbols;
+ DBGKD_COMMAND_STRING CommandString;
+ } u;
+ union
+ {
+ DBGKD_CONTROL_REPORT ControlReport;
+ DBGKD_ANY_CONTROL_REPORT AnyControlReport;
+ };
+} DBGKD_ANY_WAIT_STATE_CHANGE, *PDBGKD_ANY_WAIT_STATE_CHANGE;
+
//
// DBGKD Manipulate Structures
//
+typedef struct _DBGKD_READ_MEMORY32
+{
+ ULONG TargetBaseAddress;
+ ULONG TransferCount;
+ ULONG ActualBytesRead;
+} DBGKD_READ_MEMORY32, *PDBGKD_READ_MEMORY32;
+
typedef struct _DBGKD_READ_MEMORY64
{
ULONG64 TargetBaseAddress;
@@ -303,6 +475,13 @@
ULONG ActualBytesRead;
} DBGKD_READ_MEMORY64, *PDBGKD_READ_MEMORY64;
+typedef struct _DBGKD_WRITE_MEMORY32
+{
+ ULONG TargetBaseAddress;
+ ULONG TransferCount;
+ ULONG ActualBytesWritten;
+} DBGKD_WRITE_MEMORY32, *PDBGKD_WRITE_MEMORY32;
+
typedef struct _DBGKD_WRITE_MEMORY64
{
ULONG64 TargetBaseAddress;
@@ -319,6 +498,12 @@
{
ULONG ContextFlags;
} DBGKD_SET_CONTEXT, *PDBGKD_SET_CONTEXT;
+
+typedef struct _DBGKD_WRITE_BREAKPOINT32
+{
+ ULONG BreakPointAddress;
+ ULONG BreakPointHandle;
+} DBGKD_WRITE_BREAKPOINT32, *PDBGKD_WRITE_BREAKPOINT32;
typedef struct _DBGKD_WRITE_BREAKPOINT64
{
@@ -348,12 +533,29 @@
} DBGKD_CONTINUE2, *PDBGKD_CONTINUE2;
#include <poppack.h>
+typedef struct _DBGKD_READ_WRITE_IO32
+{
+ ULONG IoAddress;
+ ULONG DataSize;
+ ULONG DataValue;
+} DBGKD_READ_WRITE_IO32, *PDBGKD_READ_WRITE_IO32;
+
typedef struct _DBGKD_READ_WRITE_IO64
{
ULONG64 IoAddress;
ULONG DataSize;
ULONG DataValue;
} DBGKD_READ_WRITE_IO64, *PDBGKD_READ_WRITE_IO64;
+
+typedef struct _DBGKD_READ_WRITE_IO_EXTENDED32
+{
+ ULONG DataSize;
+ ULONG InterfaceType;
+ ULONG BusNumber;
+ ULONG AddressSpace;
+ ULONG IoAddress;
+ ULONG DataValue;
+} DBGKD_READ_WRITE_IO_EXTENDED32, *PDBGKD_READ_WRITE_IO_EXTENDED32;
typedef struct _DBGKD_READ_WRITE_IO_EXTENDED64
{
@@ -377,16 +579,38 @@
ULONG NumberOfSpecialCalls;
} DBGKD_QUERY_SPECIAL_CALLS, *PDBGKD_QUERY_SPECIAL_CALLS;
+typedef struct _DBGKD_SET_SPECIAL_CALL32
+{
+ ULONG SpecialCall;
+} DBGKD_SET_SPECIAL_CALL32, *PDBGKD_SET_SPECIAL_CALL32;
+
typedef struct _DBGKD_SET_SPECIAL_CALL64
{
ULONG64 SpecialCall;
} DBGKD_SET_SPECIAL_CALL64, *PDBGKD_SET_SPECIAL_CALL64;
+
+typedef struct _DBGKD_SET_INTERNAL_BREAKPOINT32
+{
+ ULONG BreakpointAddress;
+ ULONG Flags;
+} DBGKD_SET_INTERNAL_BREAKPOINT32, *PDBGKD_SET_INTERNAL_BREAKPOINT32;
typedef struct _DBGKD_SET_INTERNAL_BREAKPOINT64
{
ULONG64 BreakpointAddress;
ULONG Flags;
} DBGKD_SET_INTERNAL_BREAKPOINT64, *PDBGKD_SET_INTERNAL_BREAKPOINT64;
+
+typedef struct _DBGKD_GET_INTERNAL_BREAKPOINT32
+{
+ ULONG BreakpointAddress;
+ ULONG Flags;
+ ULONG Calls;
+ ULONG MaxCallsPerPeriod;
+ ULONG MinInstructions;
+ ULONG MaxInstructions;
+ ULONG TotalInstructions;
+} DBGKD_GET_INTERNAL_BREAKPOINT32, *PDBGKD_GET_INTERNAL_BREAKPOINT32;
typedef struct _DBGKD_GET_INTERNAL_BREAKPOINT64
{
@@ -449,6 +673,41 @@
//
// DBGKD Structure for Manipulate
//
+typedef struct _DBGKD_MANIPULATE_STATE32
+{
+ ULONG ApiNumber;
+ USHORT ProcessorLevel;
+ USHORT Processor;
+ NTSTATUS ReturnStatus;
+ union
+ {
+ DBGKD_READ_MEMORY32 ReadMemory;
+ DBGKD_WRITE_MEMORY32 WriteMemory;
+ DBGKD_READ_MEMORY64 ReadMemory64;
+ DBGKD_WRITE_MEMORY64 WriteMemory64;
+ DBGKD_GET_CONTEXT GetContext;
+ DBGKD_SET_CONTEXT SetContext;
+ DBGKD_WRITE_BREAKPOINT32 WriteBreakPoint;
+ DBGKD_RESTORE_BREAKPOINT RestoreBreakPoint;
+ DBGKD_CONTINUE Continue;
+ DBGKD_CONTINUE2 Continue2;
+ DBGKD_READ_WRITE_IO32 ReadWriteIo;
+ DBGKD_READ_WRITE_IO_EXTENDED32 ReadWriteIoExtended;
+ DBGKD_QUERY_SPECIAL_CALLS QuerySpecialCalls;
+ DBGKD_SET_SPECIAL_CALL32 SetSpecialCall;
+ DBGKD_SET_INTERNAL_BREAKPOINT32 SetInternalBreakpoint;
+ DBGKD_GET_INTERNAL_BREAKPOINT32 GetInternalBreakpoint;
+ DBGKD_GET_VERSION32 GetVersion32;
+ DBGKD_BREAKPOINTEX BreakPointEx;
+ DBGKD_READ_WRITE_MSR ReadWriteMsr;
+ DBGKD_SEARCH_MEMORY SearchMemory;
+ DBGKD_GET_SET_BUS_DATA GetSetBusData;
+ DBGKD_FILL_MEMORY FillMemory;
+ DBGKD_QUERY_MEMORY QueryMemory;
+ DBGKD_SWITCH_PARTITION SwitchPartition;
+ } u;
+} DBGKD_MANIPULATE_STATE32, *PDBGKD_MANIPULATE_STATE32;
+
typedef struct _DBGKD_MANIPULATE_STATE64
{
ULONG ApiNumber;
@@ -482,6 +741,99 @@
} u;
} DBGKD_MANIPULATE_STATE64, *PDBGKD_MANIPULATE_STATE64;
+//
+// File I/O Structure
+//
+typedef struct _DBGKD_CREATE_FILE
+{
+ ULONG DesiredAccess;
+ ULONG FileAttributes;
+ ULONG ShareAccess;
+ ULONG CreateDisposition;
+ ULONG CreateOptions;
+ ULONG64 Handle;
+ ULONG64 Length;
+} DBGKD_CREATE_FILE, *PDBGKD_CREATE_FILE;
+
+typedef struct _DBGKD_READ_FILE
+{
+ ULONG64 Handle;
+ ULONG64 Offset;
+ ULONG Length;
+} DBGKD_READ_FILE, *PDBGKD_READ_FILE;
+
+typedef struct _DBGKD_WRITE_FILE
+{
+ ULONG64 Handle;
+ ULONG64 Offset;
+ ULONG Length;
+} DBGKD_WRITE_FILE, *PDBGKD_WRITE_FILE;
+
+typedef struct _DBGKD_CLOSE_FILE
+{
+ ULONG64 Handle;
+} DBGKD_CLOSE_FILE, *PDBGKD_CLOSE_FILE;
+
+typedef struct _DBGKD_FILE_IO
+{
+ ULONG ApiNumber;
+ ULONG Status;
+ union
+ {
+ ULONG64 ReserveSpace[7];
+ DBGKD_CREATE_FILE CreateFile;
+ DBGKD_READ_FILE ReadFile;
+ DBGKD_WRITE_FILE WriteFile;
+ DBGKD_CLOSE_FILE CloseFile;
+ } u;
+} DBGKD_FILE_IO, *PDBGKD_FILE_IO;
+
+
+//
+// Control Request Structure
+//
+typedef struct _DBGKD_REQUEST_BREAKPOINT
+{
+ ULONG HardwareBreakPointNumber;
+ ULONG Available;
+} DBGKD_REQUEST_BREAKPOINT, *PDBGKD_REQUEST_BREAKPOINT;
+
+typedef struct _DBGKD_RELEASE_BREAKPOINT
+{
+ ULONG HardwareBreakPointNumber;
+ ULONG Released;
+} DBGKD_RELEASE_BREAKPOINT, *PDBGKD_RELEASE_BREAKPOINT;
+
+typedef struct _DBGKD_CONTROL_REQUEST
+{
+ ULONG ApiNumber;
+ union
+ {
+ DBGKD_REQUEST_BREAKPOINT RequestBreakpoint;
+ DBGKD_RELEASE_BREAKPOINT ReleaseBreakpoint;
+ } u;
+} DBGKD_CONTROL_REQUEST, *PDBGKD_CONTROL_REQUEST;
+
+//
+// Trace I/O Structure
+//
+typedef struct _DBGKD_PRINT_TRACE
+{
+ ULONG LengthOfData;
+} DBGKD_PRINT_TRACE, *PDBGKD_PRINT_TRACE;
+
+typedef struct _DBGKD_TRACE_IO
+{
+ ULONG ApiNumber;
+ USHORT ProcessorLevel;
+ USHORT Processor;
+ union
+ {
+ ULONG64 ReserveSpace[7];
+ DBGKD_PRINT_TRACE PrintTrace;
+ } u;
+} DBGKD_TRACE_IO, *PDBGKD_TRACE_IO;
+
FORCEINLINE
VOID
ExceptionRecord32To64(IN PEXCEPTION_RECORD32 Ex32,