From e94cb2d3a73142e1a4542382242dcf17a7f5394a Mon Sep 17 00:00:00 2001 From: belliash Date: Fri, 10 Feb 2023 17:14:12 +0100 Subject: [PATCH] Processor identification structures --- sdk/xtdk/amd64/artypes.h | 30 ++++++++++++++++++++++++++++++ sdk/xtdk/amd64/ketypes.h | 2 ++ sdk/xtdk/amd64/xtstruct.h | 3 +++ sdk/xtdk/i686/artypes.h | 30 ++++++++++++++++++++++++++++++ sdk/xtdk/i686/ketypes.h | 2 ++ sdk/xtdk/i686/xtstruct.h | 3 +++ 6 files changed, 70 insertions(+) diff --git a/sdk/xtdk/amd64/artypes.h b/sdk/xtdk/amd64/artypes.h index 93cd15c..e2ad86b 100644 --- a/sdk/xtdk/amd64/artypes.h +++ b/sdk/xtdk/amd64/artypes.h @@ -110,6 +110,14 @@ #define X86_EFLAGS_VIP_MASK 0x00100000 #define X86_EFLAGS_ID_MASK 0x00200000 +/* CPU vendor enumeration list */ +typedef enum _CPU_VENDOR +{ + CPU_VENDOR_AMD = 0x68747541, + CPU_VENDOR_INTEL = 0x756e6547, + CPU_VENDOR_UNKNOWN = 0xFFFFFFFF +} CPU_VENDOR, *PCPU_VENDOR; + /* CPUID features enumeration list */ typedef enum _CPUID_FEATURES { @@ -185,6 +193,16 @@ typedef enum _CPUID_REQUESTS CPUID_GET_SERIAL } CPUID_REQUESTS, *PCPUID_REQUESTS; +/* Processor identification information */ +typedef struct _CPU_IDENTIFICATION +{ + USHORT Family; + USHORT Model; + USHORT Stepping; + CPU_VENDOR Vendor; + UCHAR VendorName[13]; +} CPU_IDENTIFICATION, *PCPU_IDENTIFICATION; + /* CPUID registers */ typedef struct _CPUID_REGISTERS { @@ -196,4 +214,16 @@ typedef struct _CPUID_REGISTERS UINT32 Edx; } CPUID_REGISTERS, *PCPUID_REGISTERS; +/* CPU signature read from CPUID structure definition */ +typedef struct _CPUID_SIGNATURE +{ + ULONG Stepping:4; + ULONG Model:4; + ULONG Family:4; + ULONG Unused1:4; + ULONG ExtendedModel:4; + ULONG ExtendedFamily:8; + ULONG Unused2:4; +} CPU_SIGNATURE, *PCPU_SIGNATURE; + #endif /* __XTDK_AMD64_ARTYPES_H */ diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h index f4dbbbd..483757c 100644 --- a/sdk/xtdk/amd64/ketypes.h +++ b/sdk/xtdk/amd64/ketypes.h @@ -13,6 +13,7 @@ #include #include #include ARCH_HEADER(xtstruct.h) +#include ARCH_HEADER(artypes.h) /* Selector masks */ @@ -449,6 +450,7 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK PKTHREAD NextThread; ULONG64 RspBase; ULONG_PTR SetMember; + CPU_IDENTIFICATION CpuId; KPROCESSOR_STATE ProcessorState; PVOID DpcStack; ULONG_PTR MultiThreadProcessorSet; diff --git a/sdk/xtdk/amd64/xtstruct.h b/sdk/xtdk/amd64/xtstruct.h index 84614e1..058b23d 100644 --- a/sdk/xtdk/amd64/xtstruct.h +++ b/sdk/xtdk/amd64/xtstruct.h @@ -13,12 +13,15 @@ /* Architecture-specific enumeration lists forward references */ +typedef enum _CPU_VENDOR CPU_VENDOR, *PCPU_VENDOR; typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES; typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS; /* Architecture-specific structures forward references */ typedef struct _CONTEXT CONTEXT, *PCONTEXT; +typedef struct _CPU_IDENTIFICATION CPU_IDENTIFICATION, *PCPU_IDENTIFICATION; typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS; +typedef struct _CPUID_SIGNATURE CPUID_SIGNATURE, *PCPUID_SIGNATURE; typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE; typedef struct _KDESCRIPTOR KDESCRIPTOR, *PKDESCRIPTOR; diff --git a/sdk/xtdk/i686/artypes.h b/sdk/xtdk/i686/artypes.h index da0c3df..5dab6e1 100644 --- a/sdk/xtdk/i686/artypes.h +++ b/sdk/xtdk/i686/artypes.h @@ -61,6 +61,14 @@ #define SEGMENT_FS 0x64 #define SEGMENT_GS 0x65 +/* CPU vendor enumeration list */ +typedef enum _CPU_VENDOR +{ + CPU_VENDOR_AMD = 0x68747541, + CPU_VENDOR_INTEL = 0x756e6547, + CPU_VENDOR_UNKNOWN = 0xFFFFFFFF +} CPU_VENDOR, *PCPU_VENDOR; + /* CPUID features enumeration list */ typedef enum _CPUID_FEATURES { @@ -136,6 +144,16 @@ typedef enum _CPUID_REQUESTS CPUID_GET_SERIAL } CPUID_REQUESTS, *PCPUID_REQUESTS; +/* Processor identification information */ +typedef struct _CPU_IDENTIFICATION +{ + USHORT Family; + USHORT Model; + USHORT Stepping; + CPU_VENDOR Vendor; + UCHAR VendorName[13]; +} CPU_IDENTIFICATION, *PCPU_IDENTIFICATION; + /* CPUID registers */ typedef struct _CPUID_REGISTERS { @@ -147,4 +165,16 @@ typedef struct _CPUID_REGISTERS UINT32 Edx; } CPUID_REGISTERS, *PCPUID_REGISTERS; +/* CPU signature read from CPUID structure definition */ +typedef struct _CPUID_SIGNATURE +{ + ULONG Stepping:4; + ULONG Model:4; + ULONG Family:4; + ULONG Unused1:4; + ULONG ExtendedModel:4; + ULONG ExtendedFamily:8; + ULONG Unused2:4; +} CPU_SIGNATURE, *PCPU_SIGNATURE; + #endif /* __XTDK_I686_ARTYPES_H */ diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index b88e166..b4c94fb 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -13,6 +13,7 @@ #include #include #include ARCH_HEADER(xtstruct.h) +#include ARCH_HEADER(artypes.h) /* Selector masks */ @@ -352,6 +353,7 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK PKTHREAD NextThread; UCHAR Number; ULONG_PTR SetMember; + CPU_IDENTIFICATION CpuId; KPROCESSOR_STATE ProcessorState; ULONG_PTR MultiThreadProcessorSet; PVOID DpcStack; diff --git a/sdk/xtdk/i686/xtstruct.h b/sdk/xtdk/i686/xtstruct.h index a17e854..c98706d 100644 --- a/sdk/xtdk/i686/xtstruct.h +++ b/sdk/xtdk/i686/xtstruct.h @@ -13,12 +13,15 @@ /* Architecture-specific enumeration lists forward references */ +typedef enum _CPU_VENDOR CPU_VENDOR, *PCPU_VENDOR; typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES; typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS; /* Architecture-specific structures forward references */ typedef struct _CONTEXT CONTEXT, *PCONTEXT; +typedef struct _CPU_IDENTIFICATION CPU_IDENTIFICATION, *PCPU_IDENTIFICATION; typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS; +typedef struct _CPUID_SIGNATURE CPUID_SIGNATURE, *PCPUID_SIGNATURE; typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE; typedef struct _HARDWARE_PTE_PAE HARDWARE_PTE_PAE, *PHARDWARE_PTE_PAE;