- Add the system environment variables PROCESSOR_LEVEL and PROCESSOR_REVISION.

svn path=/trunk/; revision=47336
This commit is contained in:
Eric Kohl 2010-05-23 23:41:16 +00:00
parent 7fa77031b0
commit 4841dde246

View file

@ -66,20 +66,27 @@ NTSTATUS
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 @@ SmSetEnvironmentVariables(VOID)
RtlInitUnicodeString(&VariableName,
L"PROCESSOR_ARCHITECTURE");
#ifdef _M_IX86
switch (ProcessorInformation.ProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_INTEL:
VariableData = L"x86";
#elif _M_MD64
VariableData = L"AMD64";
#elif _M_ARM
VariableData = L"ARM";
#elif _M_PPC
break;
case PROCESSOR_ARCHITECTURE_PPC:
VariableData = L"PPC";
#else
#error "Unsupported Architecture!\n"
#endif
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,
@ -173,6 +191,42 @@ SmSetEnvironmentVariables(VOID)
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;
}
done:
NtClose(EnvironmentKey);