From 1df971a71e0d7407fb07d241955e3525d6fb5cb6 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Sun, 7 Jun 2026 18:47:48 +0200 Subject: [PATCH] Extend CONTEXT and PRCB structures with context flags and IPI state fields --- sdk/xtdk/amd64/ketypes.h | 15 ++++++++++++++- sdk/xtdk/i686/ketypes.h | 17 ++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h index d6e0b9d30..f8ecb6f26 100644 --- a/sdk/xtdk/amd64/ketypes.h +++ b/sdk/xtdk/amd64/ketypes.h @@ -17,6 +17,17 @@ #include ARCH_HEADER(artypes.h) +/* Processor context flags */ +#define CONTEXT_ARCH 0x100000 +#define CONTEXT_CONTROL (CONTEXT_ARCH | 0x1L) +#define CONTEXT_INTEGER (CONTEXT_ARCH | 0x2L) +#define CONTEXT_SEGMENTS (CONTEXT_ARCH | 0x4L) +#define CONTEXT_FLOATING_POINT (CONTEXT_ARCH | 0x8L) +#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARCH | 0x10L) +#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) +#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ + CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) + /* Selector masks */ #define MODE_MASK 0x0001 #define RPL_MASK 0x0003 @@ -241,7 +252,7 @@ typedef struct _CONTEXT USHORT SegFs; USHORT SegGs; USHORT SegSs; - ULONG EFlags; + ULONG Flags; ULONG64 Dr0; ULONG64 Dr1; ULONG64 Dr2; @@ -571,6 +582,8 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK KPROCESSOR_STATE ProcessorState; KSPIN_LOCK PrcbLock; KSPIN_LOCK_QUEUE LockQueue[MaximumLock]; + VOLATILE ULONG IpiFrozen; + VOLATILE LONG_PTR RequestSummary; KDPC_DATA DpcData[2]; PVOID DpcStack; LONG MaximumDpcQueueDepth; diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index 1fc3a85e0..81a1f5127 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -17,6 +17,19 @@ #include ARCH_HEADER(artypes.h) +/* Processor context flags */ +#define CONTEXT_ARCH 0x10000 +#define CONTEXT_CONTROL (CONTEXT_ARCH | 0x1L) +#define CONTEXT_INTEGER (CONTEXT_ARCH | 0x2L) +#define CONTEXT_SEGMENTS (CONTEXT_ARCH | 0x4L) +#define CONTEXT_FLOATING_POINT (CONTEXT_ARCH | 0x8L) +#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARCH | 0x10L) +#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_ARCH | 0x20L) +#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS) +#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ + CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \ + CONTEXT_EXTENDED_REGISTERS) + /* Selector masks */ #define MODE_MASK 0x0001 #define RPL_MASK 0x0003 @@ -300,7 +313,7 @@ typedef struct _CONTEXT ULONG Ebp; ULONG Eip; ULONG SegCs; - ULONG EFlags; + ULONG Flags; ULONG Esp; ULONG SegSs; UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; @@ -531,6 +544,8 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK KSPIN_LOCK PrcbLock; KSPIN_LOCK_QUEUE LockQueue[MaximumLock]; ULONG_PTR MultiThreadProcessorSet; + VOLATILE ULONG IpiFrozen; + VOLATILE LONG_PTR RequestSummary; KDPC_DATA DpcData[2]; PVOID DpcStack; LONG MaximumDpcQueueDepth;