Author: ekohl Date: Sun May 23 21:27:04 2010 New Revision: 47333
URL: http://svn.reactos.org/svn/reactos?rev=47333&view=rev Log: [SMSS] - Remove the system environment variable OS from the hivesys*.inf files. - Change the type of the system environment variable PATHEXT in the hivesys*.inf files from REG_EXPAND_SZ to REG_SZ. - Let SMSS add the system environment variables OS and NUMBER_OF_PROCESSORS to the registry.
Modified: trunk/reactos/base/system/smss/initenv.c trunk/reactos/boot/bootdata/hivesys_arm.inf trunk/reactos/boot/bootdata/hivesys_i386.inf
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] Sun May 23 21:27:04 2010 @@ -65,33 +65,116 @@ NTSTATUS SmSetEnvironmentVariables(VOID) { - PWSTR ProcessorArchitecture = L""; + SYSTEM_BASIC_INFORMATION BasicInformation; + RTL_QUERY_REGISTRY_TABLE QueryTable[3]; UNICODE_STRING Identifier; UNICODE_STRING VendorIdentifier; - UNICODE_STRING ProcessorIdentifier; WCHAR Buffer[256]; + + UNICODE_STRING EnvironmentKeyName; + OBJECT_ATTRIBUTES ObjectAttributes; + HANDLE EnvironmentKey; + UNICODE_STRING VariableName; + PWSTR VariableData; + NTSTATUS Status;
+ + Status = NtQuerySystemInformation(SystemBasicInformation, + &BasicInformation, + sizeof(SYSTEM_BASIC_INFORMATION), + NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("SM: Failed to retrieve system basic information (Status %08lx)", Status); + return Status; + } + + RtlInitUnicodeString(&EnvironmentKeyName, + L"\Registry\Machine\System\CurrentControlSet\Control\Session Manager\Environment"); + InitializeObjectAttributes(&ObjectAttributes, + &EnvironmentKeyName, + OBJ_CASE_INSENSITIVE, + NULL, + NULL); + + /* Open the system environment key */ + Status = NtOpenKey(&EnvironmentKey, + GENERIC_WRITE, + &ObjectAttributes); + if (!NT_SUCCESS(Status)) + { + DPRINT1("SM: Failed to open the environment key (Status %08lx)", Status); + return Status; + } + + /* Set the 'NUMBER_OF_PROCESSORS' system environment variable */ + RtlInitUnicodeString(&VariableName, + L"NUMBER_OF_PROCESSORS"); + + swprintf(Buffer, L"%lu", BasicInformation.NumberOfProcessors); + + Status = NtSetValueKey(EnvironmentKey, + &VariableName, + 0, + REG_SZ, + Buffer, + (wcslen(Buffer) + 1) * sizeof(WCHAR)); + if (!NT_SUCCESS(Status)) + { + DPRINT1("SM: Failed to set the NUMBER_OF_PROCESSORS environment variable (Status %08lx)", Status); + goto done; + } + + /* Set the 'OS' system environment variable */ + RtlInitUnicodeString(&VariableName, + L"OS"); + + VariableData = L"ReactOS"; + + Status = NtSetValueKey(EnvironmentKey, + &VariableName, + 0, + REG_SZ, + VariableData, + (wcslen(VariableData) + 1) * sizeof(WCHAR)); + if (!NT_SUCCESS(Status)) + { + DPRINT1("SM: Failed to set the OS environment variable (Status %08lx)", Status); + goto done; + } + /* Set the 'PROCESSOR_ARCHITECTURE' system environment variable */ + RtlInitUnicodeString(&VariableName, + L"PROCESSOR_ARCHITECTURE"); + #ifdef _M_IX86 - ProcessorArchitecture = L"x86"; + VariableData = L"x86"; #elif _M_MD64 - ProcessorArchitecture = L"AMD64"; + VariableData = L"AMD64"; #elif _M_ARM - ProcessorArchitecture = L"ARM"; + VariableData = L"ARM"; #elif _M_PPC - ProcessorArchitecture = L"PPC"; + VariableData = 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)); + Status = NtSetValueKey(EnvironmentKey, + &VariableName, + 0, + REG_SZ, + VariableData, + (wcslen(VariableData) + 1) * sizeof(WCHAR)); + if (!NT_SUCCESS(Status)) + { + DPRINT1("SM: Failed to set the PROCESSOR_ARCHITECTURE environment variable (Status %08lx)", Status); + goto done; + } + +done: + NtClose(EnvironmentKey);
/* Set the 'PROCESSOR_IDENTIFIER' system environment variable */ @@ -119,18 +202,14 @@ 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); + swprintf(Buffer, L"%wZ, %wZ", &Identifier, &VendorIdentifier);
RtlWriteRegistryValue(RTL_REGISTRY_CONTROL, L"Session Manager\Environment", L"PROCESSOR_IDENTIFIER", REG_SZ, - ProcessorIdentifier.Buffer, - (wcslen(ProcessorIdentifier.Buffer) + 1) * sizeof(WCHAR)); + Buffer, + (wcslen(Buffer) + 1) * sizeof(WCHAR)); }
RtlFreeUnicodeString(&Identifier);
Modified: trunk/reactos/boot/bootdata/hivesys_arm.inf URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesys_arm.i... ============================================================================== --- trunk/reactos/boot/bootdata/hivesys_arm.inf [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/hivesys_arm.inf [iso-8859-1] Sun May 23 21:27:04 2010 @@ -754,12 +754,11 @@
; System environment settings HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","ComSpec",0x00020000,"%SystemRoot%\system32\cmd.exe" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","OS",0x00020000,"ReactOS" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020000,"%SystemRoot%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\wbem" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","windir",0x00020000,"%SystemRoot%" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TEMP",0x00020000,"%SystemDrive%\TEMP" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TMP",0x00020000,"%SystemDrive%\TEMP" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PATHEXT",0x00020000,".COM;.EXE;.BAT;.CMD" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PATHEXT",0x00000000,".COM;.EXE;.BAT;.CMD"
; Known DLLs
Modified: trunk/reactos/boot/bootdata/hivesys_i386.inf URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesys_i386.... ============================================================================== --- trunk/reactos/boot/bootdata/hivesys_i386.inf [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/hivesys_i386.inf [iso-8859-1] Sun May 23 21:27:04 2010 @@ -901,12 +901,11 @@
; System environment settings HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","ComSpec",0x00020000,"%SystemRoot%\system32\cmd.exe" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","OS",0x00020000,"ReactOS" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020000,"%SystemRoot%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\wbem" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","windir",0x00020000,"%SystemRoot%" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TEMP",0x00020000,"%SystemDrive%\TEMP" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TMP",0x00020000,"%SystemDrive%\TEMP" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PATHEXT",0x00020000,".COM;.EXE;.BAT;.CMD" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PATHEXT",0x00000000,".COM;.EXE;.BAT;.CMD"
; Known DLLs