Set the APPDATA environment variable when logging in based on the information SHGetFo...
authorColin Finck <colin@reactos.org>
Mon, 2 Feb 2009 23:08:51 +0000 (23:08 +0000)
committerColin Finck <colin@reactos.org>
Mon, 2 Feb 2009 23:08:51 +0000 (23:08 +0000)
Windows seems to do this the same way (verified with GNU strings)

svn path=/trunk/; revision=39295

reactos/base/system/winlogon/sas.c
reactos/base/system/winlogon/winlogon.h
reactos/base/system/winlogon/winlogon.rbuild

index f560187..1acadde 100644 (file)
@@ -175,6 +175,9 @@ HandleLogon(
        SIZE_T EnvBlockSize = 0, ProfileSize = 0;
        BOOLEAN Old;
        BOOL ret = FALSE;
+       UNICODE_STRING VariableName;
+       UNICODE_STRING VariableValue;
+       WCHAR AppDataPath[MAX_PATH];
 
        /* Loading personal settings */
        DisplayStatusMessage(Session, Session->WinlogonDesktop, IDS_LOADINGYOURPERSONALSETTINGS);
@@ -219,6 +222,18 @@ HandleLogon(
                goto cleanup;
        }
 
+       /* Use SHGetFolderPathW for getting the AppData path */
+       if(SHGetFolderPathW(NULL, CSIDL_APPDATA, Session->UserToken, SHGFP_TYPE_CURRENT, AppDataPath) == E_FAIL)
+       {
+               WARN("WL: SHGetFolderPathW() failed\n");
+               goto cleanup;
+       }
+
+       /* Some environment variables need to be set by winlogon (verified against Windows XP winlogon) */
+       RtlInitUnicodeString(&VariableName, L"APPDATA");
+       RtlInitUnicodeString(&VariableValue, AppDataPath);
+       RtlSetEnvironmentVariable((PWSTR*)&lpEnvironment, &VariableName, &VariableValue);
+
        if (Session->Profile->dwType == WLX_PROFILE_TYPE_V2_0 && Session->Profile->pszEnvironment)
        {
                /* Count required size for full environment */
@@ -264,6 +279,8 @@ HandleLogon(
        DisplayStatusMessage(Session, Session->WinlogonDesktop, IDS_APPLYINGYOURPERSONALSETTINGS);
        UpdatePerUserSystemParameters(0, TRUE);
 
+       /* FIXME: Set the "Volatile Environment" key for the new user */
+
        /* Set default language */
        if (!SetDefaultLanguage(TRUE))
        {
index 1186050..4d9778b 100644 (file)
@@ -39,6 +39,7 @@
 #include <ntsecapi.h>
 #include <accctrl.h>
 #include <aclapi.h>
+#include <shlobj.h>
 
 #include <reactos/winlogon.h>
 
index 69505ab..0e35bd2 100644 (file)
@@ -9,6 +9,7 @@
        <library>advapi32</library>
        <library>userenv</library>
        <library>secur32</library>
+       <library>shell32</library>
        <file>sas.c</file>
        <file>screensaver.c</file>
        <file>setup.c</file>