From 2a0df4bd6082d10b68c5ad102ff216220ba202ef Mon Sep 17 00:00:00 2001 From: Rein Klazes Date: Fri, 28 Jan 2005 12:34:20 +0000 Subject: [PATCH] In NtQuerySystemInformation, handle request for information class 1, now named SystemCpuInformation. Return some dummy data for now. --- dlls/ntdll/nt.c | 16 ++++++++++++++++ include/winternl.h | 31 ++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index 0e0b488c6af..c359707ccdd 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -546,6 +546,22 @@ NTSTATUS WINAPI NtQuerySystemInformation( else ret = STATUS_INFO_LENGTH_MISMATCH; } break; + case SystemCpuInformation: + { + SYSTEM_CPU_INFORMATION* sci; + sci = (SYSTEM_CPU_INFORMATION *) SystemInformation; + if (Length >= sizeof(*sci)) + { + /* FIXME: move some code from kernel/cpu.c to process this */ + sci->Architecture = PROCESSOR_ARCHITECTURE_INTEL; + sci->Level = 6; /* 686, aka Pentium II+ */ + sci->Revision = 0; + sci->Reserved = 0; + sci->FeatureSet = 0x1fff; + } + else ret = STATUS_INFO_LENGTH_MISMATCH; + } + break; case SystemPerformanceInformation: { SYSTEM_PERFORMANCE_INFORMATION* spi = (SYSTEM_PERFORMANCE_INFORMATION*)SystemInformation; diff --git a/include/winternl.h b/include/winternl.h index b041a8e5e8a..cd202ea4e3e 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -521,7 +521,7 @@ typedef enum _SECTION_INHERIT { typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation = 0, - Unknown1, + SystemCpuInformation = 1, SystemPerformanceInformation = 2, SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */ Unknown4, @@ -908,6 +908,35 @@ typedef struct _SYSTEM_BASIC_INFORMATION { #endif } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; +/* CPU Information Class 0x01 */ +typedef struct { + WORD Architecture; + WORD Level; + WORD Revision; /* combination of CPU model and stepping */ + WORD Reserved; /* always zero */ + DWORD FeatureSet; /* see bit flags below */ +} SYSTEM_CPU_INFORMATION; + +/* definitions of bits in the Feature set for the x86 processors */ +#define CPU_FEATURE_VME 0x00000005 /* Virtual 86 Mode Extensions */ +#define CPU_FEATURE_TSC 0x00000002 /* Time Stamp Counter available */ +#define CPU_FEATURE_CMOV 0x00000008 /* Conditional Move instruction*/ +#define CPU_FEATURE_PGE 0x00000014 /* Page table Entry Global bit */ +#define CPU_FEATURE_PSE 0x00000024 /* Page Size Extension */ +#define CPU_FEATURE_MTRR 0x00000040 /* Memory Type Range Registers */ +#define CPU_FEATURE_CX8 0x00000080 /* Compare and eXchange 8 byte instr. */ +#define CPU_FEATURE_MMX 0x00000100 /* Multi Media eXtensions */ +#define CPU_FEATURE_X86 0x00000200 /* seems to be alway ON, on the '86 */ +#define CPU_FEATURE_PAT 0x00000400 /* Page Attribute Table */ +#define CPU_FEATURE_FXSR 0x00000800 /* FXSAVE and FXSTORE instructions */ +#define CPU_FEATURE_SEP 0x00001000 /* SYSENTER and SYSEXIT instructions */ +#define CPU_FEATURE_SSE 0x00002000 /* SSE extenstions (ext. MMX) */ +#define CPU_FEATURE_3DNOW 0x00008000 /* 3DNOW instructions available + (FIXME: needs to be confirmed) */ +#define CPU_FEATURE_SSE2 0x00010000 /* SSE2 extensions (XMMI64) */ +#define CPU_FEATURE_DS 0x00020000 /* Debug Store */ +#define CPU_FEATURE_HTT 0x00040000 /* Hyper Threading Technology */ + /* System Information Class 0x15 */ typedef struct { ULONG CurrentSize;