diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index db8073ebe3d..707eca0b32f 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1170,52 +1170,107 @@ typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE #define NX_SUPPORT_POLICY_OPTIN 2 #define NX_SUPPORT_POLICY_OPTOUT 3 -#define MAX_WOW64_SHARED_ENTRIES 16 +#define XSTATE_LEGACY_FLOATING_POINT 0 +#define XSTATE_LEGACY_SSE 1 +#define XSTATE_GSSE 2 + +#define XSTATE_MASK_LEGACY_FLOATING_POINT (1 << XSTATE_LEGACY_FLOATING_POINT) +#define XSTATE_MASK_LEGACY_SSE (1 << XSTATE_LEGACY_SSE) +#define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE) +#define XSTATE_MASK_GSSE (1 << XSTATE_GSSE) + +#define MAXIMUM_XSTATE_FEATURES 64 + +typedef struct _XSTATE_FEATURE +{ + ULONG Offset; + ULONG Size; +} XSTATE_FEATURE, *PXSTATE_FEATURE; + +typedef struct _XSTATE_CONFIGURATION +{ + ULONG64 EnabledFeatures; + ULONG Size; + ULONG OptimizedSave:1; + XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES]; +} XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION; typedef struct _KUSER_SHARED_DATA { - ULONG TickCountLowDeprecated; - ULONG TickCountMultiplier; - volatile KSYSTEM_TIME InterruptTime; - volatile KSYSTEM_TIME SystemTime; - volatile KSYSTEM_TIME TimeZoneBias; - USHORT ImageNumberLow; - USHORT ImageNumberHigh; - WCHAR NtSystemRoot[260]; - ULONG MaxStackTraceDepth; - ULONG CryptoExponent; - ULONG TimeZoneId; - ULONG LargePageMinimum; - ULONG Reserved2[7]; - NT_PRODUCT_TYPE NtProductType; - BOOLEAN ProductTypeIsValid; - ULONG NtMajorVersion; - ULONG NtMinorVersion; - BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; - ULONG Reserved1; - ULONG Reserved3; - volatile ULONG TimeSlip; - ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; - LARGE_INTEGER SystemExpirationDate; - ULONG SuiteMask; - BOOLEAN KdDebuggerEnabled; - UCHAR NXSupportPolicy; - volatile ULONG ActiveConsoleId; - volatile ULONG DismountCount; - ULONG ComPlusPackage; - ULONG LastSystemRITEventTickCount; - ULONG NumberOfPhysicalPages; - BOOLEAN SafeBootMode; - ULONG TraceLogging; - ULONGLONG TestRetInstruction; - ULONG SystemCall; - ULONG SystemCallReturn; - ULONGLONG SystemCallPad[3]; + ULONG TickCountLowDeprecated; /* 0x000 */ + ULONG TickCountMultiplier; /* 0x004 */ + volatile KSYSTEM_TIME InterruptTime; /* 0x008 */ + volatile KSYSTEM_TIME SystemTime; /* 0x014 */ + volatile KSYSTEM_TIME TimeZoneBias; /* 0x020 */ + USHORT ImageNumberLow; /* 0x02c */ + USHORT ImageNumberHigh; /* 0x02e */ + WCHAR NtSystemRoot[260]; /* 0x030 */ + ULONG MaxStackTraceDepth; /* 0x238 */ + ULONG CryptoExponent; /* 0x23c */ + ULONG TimeZoneId; /* 0x240 */ + ULONG LargePageMinimum; /* 0x244 */ + ULONG AitSamplingValue; /* 0x248 */ + ULONG AppCompatFlag; /* 0x24c */ + ULONGLONG RNGSeedVersion; /* 0x250 */ + ULONG GlobalValidationRunLevel; /* 0x258 */ + volatile ULONG TimeZoneBiasStamp; /* 0x25c */ + ULONG NtBuildNumber; /* 0x260 */ + NT_PRODUCT_TYPE NtProductType; /* 0x264 */ + BOOLEAN ProductTypeIsValid; /* 0x268 */ + USHORT NativeProcessorArchitecture; /* 0x26a */ + ULONG NtMajorVersion; /* 0x26c */ + ULONG NtMinorVersion; /* 0x270 */ + BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; /* 0x274 */ + ULONG Reserved1; /* 0x2b4 */ + ULONG Reserved3; /* 0x2b8 */ + volatile ULONG TimeSlip; /* 0x2bc */ + ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; /* 0x2c0 */ + ULONG BootId; /* 0x2c4 */ + LARGE_INTEGER SystemExpirationDate; /* 0x2c8 */ + ULONG SuiteMask; /* 0x2d0 */ + BOOLEAN KdDebuggerEnabled; /* 0x2d4 */ + UCHAR NXSupportPolicy; /* 0x2d5 */ + volatile ULONG ActiveConsoleId; /* 0x2d8 */ + volatile ULONG DismountCount; /* 0x2dc */ + ULONG ComPlusPackage; /* 0x2e0 */ + ULONG LastSystemRITEventTickCount; /* 0x2e4 */ + ULONG NumberOfPhysicalPages; /* 0x2e8 */ + BOOLEAN SafeBootMode; /* 0x2ec */ + UCHAR VirtualizationFlags; /* 0x2ed */ + ULONG TraceLogging; /* 0x2f0 */ + ULONGLONG TestRetInstruction; /* 0x2f8 */ + ULONG SystemCall; /* 0x300 */ + ULONG SystemCallReturn; /* 0x304 */ + ULONGLONG SystemCallPad[3]; /* 0x308 */ union { - volatile KSYSTEM_TIME TickCount; + volatile KSYSTEM_TIME TickCount; /* 0x320 */ volatile ULONG64 TickCountQuad; } DUMMYUNIONNAME; - ULONG Cookie; - ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES]; + ULONG Cookie; /* 0x330 */ + LONGLONG ConsoleSessionForegroundProcessId; /* 0x338 */ + ULONGLONG TimeUpdateLock; /* 0x340 */ + ULONGLONG BaselineSystemTimeQpc; /* 0x348 */ + ULONGLONG BaselineInterruptTimeQpc; /* 0x350 */ + ULONGLONG QpcSystemTimeIncrement; /* 0x358 */ + ULONGLONG QpcInterruptTimeIncrement; /* 0x360 */ + UCHAR QpcSystemTimeIncrementShift; /* 0x368 */ + UCHAR QpcInterruptTimeIncrementShift; /* 0x369 */ + USHORT UnparkedProcessorCount; /* 0x36a */ + ULONG EnclaveFeatureMask[4]; /* 0x36c */ + ULONG TelemetryCoverageRound; /* 0x37c */ + USHORT UserModeGlobalLogger[16]; /* 0x380 */ + ULONG HeapTracingPid[2]; /* 0x390 */ + ULONG CritSecTracingPid[2]; /* 0x398 */ + ULONG ImageFileExecutionOptions; /* 0x3a0 */ + ULONG LangGenerationCount; /* 0x3a4 */ + ULONG ActiveProcessorAffinity; /* 0x3a8 */ + volatile ULONGLONG InterruptTimeBias; /* 0x3b0 */ + volatile ULONGLONG QpcBias; /* 0x3b8 */ + ULONG ActiveProcessorCount; /* 0x3c0 */ + volatile UCHAR ActiveGroupCount; /* 0x3c4 */ + USHORT QpcData; /* 0x3c6 */ + LARGE_INTEGER TimeZoneBiasEffectiveStart; /* 0x3c8 */ + LARGE_INTEGER TimeZoneBiasEffectiveEnd; /* 0x3d0 */ + XSTATE_CONFIGURATION XState; /* 0x3d8 */ } KSHARED_USER_DATA, *PKSHARED_USER_DATA; typedef enum _MEMORY_CACHING_TYPE {