NtQuerySystemInformation: cpu information

Rein Klazes wijn at wanadoo.nl
Thu Jan 27 07:08:49 CST 2005


Hi,

Changelog:
	dlls/ntdll	: nt.c
	include		: winternl.h

	In NtQuerySystemInformation, handle request for information
	class 1, now named SystemCpuInformation. Return some dummy
	data for now.

Rein.
-------------- next part --------------
--- wine/dlls/ntdll/nt.c	2005-01-27 08:32:17.000000000 +0100
+++ mywine/dlls/ntdll/nt.c	2005-01-27 13:52:32.000000000 +0100
@@ -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;
--- wine/include/winternl.h	2005-01-27 08:32:53.000000000 +0100
+++ mywine/include/winternl.h	2005-01-27 13:54:11.000000000 +0100
@@ -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;


More information about the wine-patches mailing list