Author: ekohl
Date: Mon May 24 01:41:16 2010
New Revision: 47336
URL:
http://svn.reactos.org/svn/reactos?rev=47336&view=rev
Log:
[SMSS]
- Add the system environment variables PROCESSOR_LEVEL and PROCESSOR_REVISION.
Modified:
trunk/reactos/base/system/smss/initenv.c
Modified: trunk/reactos/base/system/smss/initenv.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/smss/initenv.c…
==============================================================================
--- trunk/reactos/base/system/smss/initenv.c [iso-8859-1] (original)
+++ trunk/reactos/base/system/smss/initenv.c [iso-8859-1] Mon May 24 01:41:16 2010
@@ -66,20 +66,27 @@
SmSetEnvironmentVariables(VOID)
{
SYSTEM_BASIC_INFORMATION BasicInformation;
-
+ SYSTEM_PROCESSOR_INFORMATION ProcessorInformation;
RTL_QUERY_REGISTRY_TABLE QueryTable[3];
UNICODE_STRING Identifier;
UNICODE_STRING VendorIdentifier;
WCHAR Buffer[256];
-
UNICODE_STRING EnvironmentKeyName;
OBJECT_ATTRIBUTES ObjectAttributes;
HANDLE EnvironmentKey;
UNICODE_STRING VariableName;
PWSTR VariableData;
-
NTSTATUS Status;
+ Status = NtQuerySystemInformation(SystemProcessorInformation,
+ &ProcessorInformation,
+ sizeof(SYSTEM_PROCESSOR_INFORMATION),
+ NULL);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("SM: Failed to retrieve system processor information (Status
%08lx)", Status);
+ return Status;
+ }
Status = NtQuerySystemInformation(SystemBasicInformation,
&BasicInformation,
@@ -149,17 +156,28 @@
RtlInitUnicodeString(&VariableName,
L"PROCESSOR_ARCHITECTURE");
-#ifdef _M_IX86
- VariableData = L"x86";
-#elif _M_MD64
- VariableData = L"AMD64";
-#elif _M_ARM
- VariableData = L"ARM";
-#elif _M_PPC
- VariableData = L"PPC";
-#else
- #error "Unsupported Architecture!\n"
-#endif
+ switch (ProcessorInformation.ProcessorArchitecture)
+ {
+ case PROCESSOR_ARCHITECTURE_INTEL:
+ VariableData = L"x86";
+ break;
+
+ case PROCESSOR_ARCHITECTURE_PPC:
+ VariableData = L"PPC";
+ break;
+
+ case PROCESSOR_ARCHITECTURE_ARM:
+ VariableData = L"ARM";
+ break;
+
+ case PROCESSOR_ARCHITECTURE_AMD64:
+ VariableData = L"AMD64";
+ break;
+
+ default:
+ VariableData = L"Unknown";
+ break;
+ }
Status = NtSetValueKey(EnvironmentKey,
&VariableName,
@@ -170,6 +188,42 @@
if (!NT_SUCCESS(Status))
{
DPRINT1("SM: Failed to set the PROCESSOR_ARCHITECTURE environment variable
(Status %08lx)", Status);
+ goto done;
+ }
+
+ /* Set the 'PROCESSOR_LEVEL' system environment variable */
+ RtlInitUnicodeString(&VariableName,
+ L"PROCESSOR_LEVEL");
+
+ swprintf(Buffer, L"%lu", ProcessorInformation.ProcessorLevel);
+
+ Status = NtSetValueKey(EnvironmentKey,
+ &VariableName,
+ 0,
+ REG_SZ,
+ Buffer,
+ (wcslen(Buffer) + 1) * sizeof(WCHAR));
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("SM: Failed to set the PROCESSOR_LEVEL environment variable (Status
%08lx)", Status);
+ goto done;
+ }
+
+ /* Set the 'PROCESSOR_REVISION' system environment variable */
+ RtlInitUnicodeString(&VariableName,
+ L"PROCESSOR_REVISION");
+
+ swprintf(Buffer, L"%04x", ProcessorInformation.ProcessorRevision);
+
+ Status = NtSetValueKey(EnvironmentKey,
+ &VariableName,
+ 0,
+ REG_SZ,
+ Buffer,
+ (wcslen(Buffer) + 1) * sizeof(WCHAR));
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("SM: Failed to set the PROCESSOR_REVISION environment variable
(Status %08lx)", Status);
goto done;
}