reactos/sdk/include/psdk/wdbgexts.h
Hermès Bélusca-Maïto f7024d6c72
[PSDK][NTOS:KD64] Turns out, that even Clang in MSVC mode needs the 64-bits pointer extension hack!
Addendum to commit de81021ba.
Otherwise, we get the following build error:

 \ntoskrnl\kd64\kddata.c(532,5): error: initializer element is not a compile-time constant
      PtrToUL64(RtlpBreakWithStatusInstruction),
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 \ntoskrnl\kd64\kddata.c(526,26): note: expanded from macro 'PtrToUL64'
 #define PtrToUL64(x)    ((ULPTR64)(x))
                          ^~~~~~~~~~~~
2022-11-24 13:30:43 +01:00

383 lines
10 KiB
C

#ifndef _WDBGEXTS_
#define _WDBGEXTS_
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
enum
{
DBGKD_SIMULATION_NONE,
DBGKD_SIMULATION_EXDI
};
#define KD_SECONDARY_VERSION_DEFAULT 0
#define KD_SECONDARY_VERSION_AMD64_OBSOLETE_CONTEXT_1 0
#define KD_SECONDARY_VERSION_AMD64_OBSOLETE_CONTEXT_2 1
#define KD_SECONDARY_VERSION_AMD64_CONTEXT 2
#if defined(_AMD64_)
#define CURRENT_KD_SECONDARY_VERSION KD_SECONDARY_VERSION_AMD64_CONTEXT
#else
#define CURRENT_KD_SECONDARY_VERSION KD_SECONDARY_VERSION_DEFAULT
#endif
#define DBGKD_VERS_FLAG_MP 0x0001
#define DBGKD_VERS_FLAG_DATA 0x0002
#define DBGKD_VERS_FLAG_PTR64 0x0004
#define DBGKD_VERS_FLAG_NOMM 0x0008
#define DBGKD_VERS_FLAG_HSS 0x0010
#define DBGKD_VERS_FLAG_PARTITIONS 0x0020
#define KDBG_TAG 'GBDK'
typedef enum _DBGKD_MAJOR_TYPES
{
DBGKD_MAJOR_NT,
DBGKD_MAJOR_XBOX,
DBGKD_MAJOR_BIG,
DBGKD_MAJOR_EXDI,
DBGKD_MAJOR_NTBD,
DBGKD_MAJOR_EFI,
DBGKD_MAJOR_TNT,
DBGKD_MAJOR_SINGULARITY,
DBGKD_MAJOR_HYPERVISOR,
DBGKD_MAJOR_MIDORI,
DBGKD_MAJOR_COUNT
} DBGKD_MAJOR_TYPES;
//
// The major type is in the high byte
//
#define DBGKD_MAJOR_TYPE(MajorVersion) \
((DBGKD_MAJOR_TYPES)((MajorVersion) >> 8))
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
{
USHORT MajorVersion;
USHORT MinorVersion;
UCHAR ProtocolVersion;
UCHAR KdSecondaryVersion;
USHORT Flags;
USHORT MachineType;
UCHAR MaxPacketType;
UCHAR MaxStateChange;
UCHAR MaxManipulate;
UCHAR Simulation;
USHORT Unused[1];
ULONG64 KernBase;
ULONG64 PsLoadedModuleList;
ULONG64 DebuggerDataList;
} DBGKD_GET_VERSION64, *PDBGKD_GET_VERSION64;
typedef struct _DBGKD_DEBUG_DATA_HEADER64
{
LIST_ENTRY64 List;
ULONG OwnerTag;
ULONG Size;
} DBGKD_DEBUG_DATA_HEADER64, *PDBGKD_DEBUG_DATA_HEADER64;
/* Self-documenting type: stores a pointer as a 64-bit quantity */
#if !defined(_WIN64) && (defined(__GNUC__) || defined(__clang__))
/* Minimal hackery for GCC/Clang, see commit b9cd3f2d9 (r25845) and de81021ba */
typedef union _ULPTR64
{
ULONG_PTR ptr;
ULONG64 ptr64;
} ULPTR64;
#else
// #define ULPTR64 PVOID64
#define ULPTR64 ULONG64
#endif
typedef struct _KDDEBUGGER_DATA64
{
DBGKD_DEBUG_DATA_HEADER64 Header;
ULONG64 KernBase;
ULPTR64 BreakpointWithStatus;
ULONG64 SavedContext;
USHORT ThCallbackStack;
USHORT NextCallback;
USHORT FramePointer;
USHORT PaeEnabled:1;
ULPTR64 KiCallUserMode;
ULONG64 KeUserCallbackDispatcher;
ULPTR64 PsLoadedModuleList;
ULPTR64 PsActiveProcessHead;
ULPTR64 PspCidTable;
ULPTR64 ExpSystemResourcesList;
ULPTR64 ExpPagedPoolDescriptor;
ULPTR64 ExpNumberOfPagedPools;
ULPTR64 KeTimeIncrement;
ULPTR64 KeBugCheckCallbackListHead;
ULPTR64 KiBugcheckData;
ULPTR64 IopErrorLogListHead;
ULPTR64 ObpRootDirectoryObject;
ULPTR64 ObpTypeObjectType;
ULPTR64 MmSystemCacheStart;
ULPTR64 MmSystemCacheEnd;
ULPTR64 MmSystemCacheWs;
ULPTR64 MmPfnDatabase;
ULPTR64 MmSystemPtesStart;
ULPTR64 MmSystemPtesEnd;
ULPTR64 MmSubsectionBase;
ULPTR64 MmNumberOfPagingFiles;
ULPTR64 MmLowestPhysicalPage;
ULPTR64 MmHighestPhysicalPage;
ULPTR64 MmNumberOfPhysicalPages;
ULPTR64 MmMaximumNonPagedPoolInBytes;
ULPTR64 MmNonPagedSystemStart;
ULPTR64 MmNonPagedPoolStart;
ULPTR64 MmNonPagedPoolEnd;
ULPTR64 MmPagedPoolStart;
ULPTR64 MmPagedPoolEnd;
ULPTR64 MmPagedPoolInformation;
ULONG64 MmPageSize;
ULPTR64 MmSizeOfPagedPoolInBytes;
ULPTR64 MmTotalCommitLimit;
ULPTR64 MmTotalCommittedPages;
ULPTR64 MmSharedCommit;
ULPTR64 MmDriverCommit;
ULPTR64 MmProcessCommit;
ULPTR64 MmPagedPoolCommit;
ULPTR64 MmExtendedCommit;
ULPTR64 MmZeroedPageListHead;
ULPTR64 MmFreePageListHead;
ULPTR64 MmStandbyPageListHead;
ULPTR64 MmModifiedPageListHead;
ULPTR64 MmModifiedNoWritePageListHead;
ULPTR64 MmAvailablePages;
ULPTR64 MmResidentAvailablePages;
ULPTR64 PoolTrackTable;
ULPTR64 NonPagedPoolDescriptor;
ULPTR64 MmHighestUserAddress;
ULPTR64 MmSystemRangeStart;
ULPTR64 MmUserProbeAddress;
ULPTR64 KdPrintCircularBuffer;
ULPTR64 KdPrintCircularBufferEnd;
ULPTR64 KdPrintWritePointer;
ULPTR64 KdPrintRolloverCount;
ULPTR64 MmLoadedUserImageList;
#if (NTDDI_VERSION >= NTDDI_WINXP)
ULPTR64 NtBuildLab;
ULPTR64 KiNormalSystemCall;
#endif
/* NOTE: Documented as "NT 5.0 hotfix (QFE) addition" */
#if (NTDDI_VERSION >= NTDDI_WIN2KSP4)
ULPTR64 KiProcessorBlock;
ULPTR64 MmUnloadedDrivers;
ULPTR64 MmLastUnloadedDriver;
ULPTR64 MmTriageActionTaken;
ULPTR64 MmSpecialPoolTag;
ULPTR64 KernelVerifier;
ULPTR64 MmVerifierData;
ULPTR64 MmAllocatedNonPagedPool;
ULPTR64 MmPeakCommitment;
ULPTR64 MmTotalCommitLimitMaximum;
ULPTR64 CmNtCSDVersion;
#endif
#if (NTDDI_VERSION >= NTDDI_WINXP)
ULPTR64 MmPhysicalMemoryBlock;
ULPTR64 MmSessionBase;
ULPTR64 MmSessionSize;
ULPTR64 MmSystemParentTablePage;
#endif
#if (NTDDI_VERSION >= NTDDI_WS03)
ULPTR64 MmVirtualTranslationBase;
USHORT OffsetKThreadNextProcessor;
USHORT OffsetKThreadTeb;
USHORT OffsetKThreadKernelStack;
USHORT OffsetKThreadInitialStack;
USHORT OffsetKThreadApcProcess;
USHORT OffsetKThreadState;
USHORT OffsetKThreadBStore;
USHORT OffsetKThreadBStoreLimit;
USHORT SizeEProcess;
USHORT OffsetEprocessPeb;
USHORT OffsetEprocessParentCID;
USHORT OffsetEprocessDirectoryTableBase;
USHORT SizePrcb;
USHORT OffsetPrcbDpcRoutine;
USHORT OffsetPrcbCurrentThread;
USHORT OffsetPrcbMhz;
USHORT OffsetPrcbCpuType;
USHORT OffsetPrcbVendorString;
USHORT OffsetPrcbProcStateContext;
USHORT OffsetPrcbNumber;
USHORT SizeEThread;
ULPTR64 KdPrintCircularBufferPtr;
ULPTR64 KdPrintBufferSize;
ULPTR64 KeLoaderBlock;
USHORT SizePcr;
USHORT OffsetPcrSelfPcr;
USHORT OffsetPcrCurrentPrcb;
USHORT OffsetPcrContainedPrcb;
USHORT OffsetPcrInitialBStore;
USHORT OffsetPcrBStoreLimit;
USHORT OffsetPcrInitialStack;
USHORT OffsetPcrStackLimit;
USHORT OffsetPrcbPcrPage;
USHORT OffsetPrcbProcStateSpecialReg;
USHORT GdtR0Code;
USHORT GdtR0Data;
USHORT GdtR0Pcr;
USHORT GdtR3Code;
USHORT GdtR3Data;
USHORT GdtR3Teb;
USHORT GdtLdt;
USHORT GdtTss;
USHORT Gdt64R3CmCode;
USHORT Gdt64R3CmTeb;
ULPTR64 IopNumTriageDumpDataBlocks;
ULPTR64 IopTriageDumpDataBlocks;
#endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
ULPTR64 VfCrashDataBlock;
ULPTR64 MmBadPagesDetected;
ULPTR64 MmZeroedPageSingleBitErrorsDetected;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN7)
ULPTR64 EtwpDebuggerData;
USHORT OffsetPrcbContext;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
USHORT OffsetPrcbMaxBreakpoints;
USHORT OffsetPrcbMaxWatchpoints;
ULONG OffsetKThreadStackLimit;
ULONG OffsetKThreadStackBase;
ULONG OffsetKThreadQueueListEntry;
ULONG OffsetEThreadIrpList;
USHORT OffsetPrcbIdleThread;
USHORT OffsetPrcbNormalDpcState;
USHORT OffsetPrcbDpcStack;
USHORT OffsetPrcbIsrStack;
USHORT SizeKDPC_STACK_FRAME;
#endif
#if (NTDDI_VERSION >= NTDDI_WINBLUE) // NTDDI_WIN81
USHORT OffsetKPriQueueThreadListHead;
USHORT OffsetKThreadWaitReason;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
USHORT Padding;
ULPTR64 PteBase;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN10_RS5)
ULPTR64 RetpolineStubFunctionTable;
ULONG RetpolineStubFunctionTableSize;
ULONG RetpolineStubOffset;
ULONG RetpolineStubSize;
#endif
} KDDEBUGGER_DATA64, *PKDDEBUGGER_DATA64;
#ifdef __cplusplus
}
#endif
#endif // _WDBGEXTS_