Author: cfinck
Date: Mon Feb 2 17:08:51 2009
New Revision: 39295
URL:
http://svn.reactos.org/svn/reactos?rev=39295&view=rev
Log:
Set the APPDATA environment variable when logging in based on the information
SHGetFolderPathW returns for the passed User Token.
Windows seems to do this the same way (verified with GNU strings)
Modified:
trunk/reactos/base/system/winlogon/sas.c
trunk/reactos/base/system/winlogon/winlogon.h
trunk/reactos/base/system/winlogon/winlogon.rbuild
Modified: trunk/reactos/base/system/winlogon/sas.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/winlogon/sas.c…
==============================================================================
--- trunk/reactos/base/system/winlogon/sas.c [iso-8859-1] (original)
+++ trunk/reactos/base/system/winlogon/sas.c [iso-8859-1] Mon Feb 2 17:08:51 2009
@@ -175,6 +175,9 @@
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);
@@ -218,6 +221,18 @@
WARN("WL: CreateEnvironmentBlock() failed\n");
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)
{
@@ -263,6 +278,8 @@
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))
Modified: trunk/reactos/base/system/winlogon/winlogon.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/winlogon/winlo…
==============================================================================
--- trunk/reactos/base/system/winlogon/winlogon.h [iso-8859-1] (original)
+++ trunk/reactos/base/system/winlogon/winlogon.h [iso-8859-1] Mon Feb 2 17:08:51 2009
@@ -39,6 +39,7 @@
#include <ntsecapi.h>
#include <accctrl.h>
#include <aclapi.h>
+#include <shlobj.h>
#include <reactos/winlogon.h>
Modified: trunk/reactos/base/system/winlogon/winlogon.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/winlogon/winlo…
==============================================================================
--- trunk/reactos/base/system/winlogon/winlogon.rbuild [iso-8859-1] (original)
+++ trunk/reactos/base/system/winlogon/winlogon.rbuild [iso-8859-1] Mon Feb 2 17:08:51
2009
@@ -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>