@@ -130,6 +130,7 @@ char *GetHomeDirFromToken(char *userName, HANDLE token)
130
130
{
131
131
UCHAR domain [200 ];
132
132
wchar_t pw_buf [MAX_PATH ] = { L'\0' };
133
+ PWSTR tmp ;
133
134
134
135
debug ("-> GetHomeDirFromToken()..." );
135
136
@@ -152,49 +153,34 @@ char *GetHomeDirFromToken(char *userName, HANDLE token)
152
153
profileInfo .hProfile = NULL ;
153
154
profileInfo .dwSize = sizeof (profileInfo );
154
155
155
-
156
-
157
- if (LoadUserProfile (token , & profileInfo ) == FALSE)
158
- {
159
- debug ("<- GetHomeDirFromToken()..." );
160
- debug ("LoadUserProfile failure: %d" , GetLastError ());
161
-
162
- return NULL ;
163
- }
164
-
165
156
/*
166
157
* And retrieve homedir from profile.
167
158
*/
168
-
169
- if (! SUCCEEDED (SHGetFolderPathW ( NULL , CSIDL_PROFILE , token , 0 , pw_homedir )))
159
+
160
+ if (SUCCEEDED (SHGetKnownFolderPath ( & FOLDERID_Documents , 0 , token , & tmp )))
170
161
{
171
- debug ("<- GetHomeDirFromToken()..." );
172
- debug ("SHGetFolderPath failed" );
173
-
174
- return NULL ;
162
+ wcscpy_s (pw_homedir , MAX_PATH , tmp );
163
+ CoTaskMemFree (tmp );
164
+ } else
165
+ {
166
+ debug ("SHGetKnownFolderPath on FOLDERID_Documents failed" );
167
+ GetWindowsDirectoryW (pw_homedir , MAX_PATH );
175
168
}
176
-
177
- // update APPDATA user's env variable
178
- if (SUCCEEDED (SHGetFolderPathW ( NULL , CSIDL_APPDATA , token , 0 , pw_buf )))
169
+
170
+ // update APPDATA user's env variable
171
+ if (SUCCEEDED (SHGetKnownFolderPath ( & FOLDERID_RoamingAppData , 0 , token , & tmp )))
179
172
{
180
- SetEnvironmentVariableW (L"APPDATA" , pw_buf );
173
+ SetEnvironmentVariableW (L"APPDATA" , tmp );
174
+ CoTaskMemFree (tmp );
181
175
}
182
176
183
177
// update LOCALAPPDATA user's env variable
184
- if (SUCCEEDED (SHGetFolderPathW ( NULL , CSIDL_LOCAL_APPDATA , token , 0 , pw_buf )))
178
+ if (SUCCEEDED (SHGetKnownFolderPath ( & FOLDERID_LocalAppData , 0 , token , & tmp )))
185
179
{
186
- SetEnvironmentVariableW (L"LOCALAPPDATA" , pw_buf );
180
+ SetEnvironmentVariableW (L"LOCALAPPDATA" , tmp );
181
+ CoTaskMemFree (tmp );
187
182
}
188
183
189
- /*
190
- * Unload user profile.
191
- */
192
-
193
- if (UnloadUserProfile (token , profileInfo .hProfile ) == FALSE)
194
- {
195
- debug ("WARNING. Cannot unload user profile (%u)." , GetLastError ());
196
- }
197
-
198
184
debug ("<- GetHomeDirFromToken()..." );
199
185
200
186
return pw_homedir ;
0 commit comments