https://git.reactos.org/?p=reactos.git;a=commitdiff;h=258caa85d1745796c7d192d8d0b6baa70fa0b9ac

commit 258caa85d1745796c7d192d8d0b6baa70fa0b9ac
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Wed Nov 2 15:46:08 2022 +0100
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Thu Nov 3 02:55:51 2022 +0100

    [SMSS] Call SmpConfigureEnvironment() twice in order to resolve forward 
environment variables references.
    
    Example: environment variable EnvVar1 that refers to a later-defined
    variable EnvVar2.
---
 base/system/smss/sminit.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/base/system/smss/sminit.c b/base/system/smss/sminit.c
index 8960010fcc8..da11f72e000 100644
--- a/base/system/smss/sminit.c
+++ b/base/system/smss/sminit.c
@@ -477,6 +477,12 @@ SmpConfigureKnownDlls(IN PWSTR ValueName,
     }
 }
 
+/**
+ * @remark
+ * SmpConfigureEnvironment() should be called twice in order to resolve
+ * forward references to environment variables.
+ * See the two L"Environment" entries in SmpRegistryConfigurationTable[].
+ **/
 NTSTATUS
 NTAPI
 SmpConfigureEnvironment(IN PWSTR ValueName,
@@ -493,7 +499,7 @@ SmpConfigureEnvironment(IN PWSTR ValueName,
     RtlInitUnicodeString(&ValueString, ValueName);
     RtlInitUnicodeString(&DataString, ValueData);
     DPRINT("Setting %wZ = %wZ\n", &ValueString, &DataString);
-    Status = RtlSetEnvironmentVariable(0, &ValueString, &DataString);
+    Status = RtlSetEnvironmentVariable(NULL, &ValueString, &DataString);
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("SMSS: 'SET %wZ = %wZ' failed - Status == %lx\n",
@@ -716,6 +722,13 @@ SmpRegistryConfigurationTable[] =
         0
     },
 
+    /**
+     * @remark
+     * SmpConfigureEnvironment() is expected to be called twice
+     * (see SmpCalledConfigEnv) in order to resolve forward references
+     * to environment variables (e.g. EnvVar1 referring to EnvVar2,
+     * before EnvVar2 is defined).
+     **/
     {
         SmpConfigureEnvironment,
         RTL_QUERY_REGISTRY_SUBKEY,
@@ -726,6 +739,17 @@ SmpRegistryConfigurationTable[] =
         0
     },
 
+    {
+        SmpConfigureEnvironment,
+        RTL_QUERY_REGISTRY_SUBKEY,
+        L"Environment",
+        NULL,
+        REG_NONE,
+        NULL,
+        0
+    },
+    /****/
+
     {
         SmpConfigureSubSystems,
         RTL_QUERY_REGISTRY_SUBKEY,

Reply via email to