+{
+ PWSTR ProcessorArchitecture = L"";
+ RTL_QUERY_REGISTRY_TABLE QueryTable[3];
+ UNICODE_STRING Identifier;
+ UNICODE_STRING VendorIdentifier;
+ UNICODE_STRING ProcessorIdentifier;
+ WCHAR Buffer[256];
+ NTSTATUS Status;
+
+ /* Set the 'PROCESSOR_ARCHITECTURE' system environment variable */
+#ifdef _M_IX86
+ ProcessorArchitecture = L"x86";
+#elif _M_MD64
+ ProcessorArchitecture = L"AMD64";
+#elif _M_ARM
+ ProcessorArchitecture = L"ARM";
+#elif _M_PPC
+ ProcessorArchitecture = L"PPC";
+#else
+ #error "Unsupported Architecture!\n"
+#endif
+
+ RtlWriteRegistryValue(RTL_REGISTRY_CONTROL,
+ L"Session Manager\\Environment",
+ L"PROCESSOR_ARCHITECTURE",
+ REG_SZ,
+ ProcessorArchitecture,
+ (wcslen(ProcessorArchitecture) + 1) * sizeof(WCHAR));
+
+
+ /* Set the 'PROCESSOR_IDENTIFIER' system environment variable */
+ RtlInitUnicodeString(&Identifier, NULL);
+ RtlInitUnicodeString(&VendorIdentifier, NULL);
+
+ RtlZeroMemory(&QueryTable,
+ sizeof(QueryTable));
+
+ QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
+ QueryTable[0].Name = L"Identifier";
+ QueryTable[0].EntryContext = &Identifier;
+
+ QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
+ QueryTable[1].Name = L"VendorIdentifier";
+ QueryTable[1].EntryContext = &VendorIdentifier;
+
+ Status = RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE,
+ L"\\Registry\\Machine\\Hardware\\Description\\System\\CentralProcessor\\0",
+ QueryTable,
+ NULL,
+ NULL);
+ if (NT_SUCCESS(Status))
+ {
+ DPRINT("SM: szIdentifier: %wZ\n", &Identifier);
+ DPRINT("SM: szVendorIdentifier: %wZ\n", &VendorIdentifier);
+
+ RtlInitEmptyUnicodeString(&ProcessorIdentifier, Buffer, 256 * sizeof(WCHAR));
+
+ RtlAppendUnicodeStringToString(&ProcessorIdentifier, &Identifier);
+ RtlAppendUnicodeToString(&ProcessorIdentifier, L", ");
+ RtlAppendUnicodeStringToString(&ProcessorIdentifier, &VendorIdentifier);
+
+ RtlWriteRegistryValue(RTL_REGISTRY_CONTROL,
+ L"Session Manager\\Environment",
+ L"PROCESSOR_IDENTIFIER",
+ REG_SZ,
+ ProcessorIdentifier.Buffer,
+ (wcslen(ProcessorIdentifier.Buffer) + 1) * sizeof(WCHAR));
+ }
+
+ RtlFreeUnicodeString(&Identifier);
+ RtlFreeUnicodeString(&VendorIdentifier);
+
+ return STATUS_SUCCESS;
+}
+
+
+/**********************************************************************
+ * Set environment variables from registry
+ */
+NTSTATUS
+SmUpdateEnvironment(VOID)