@@ -55,6 +55,37 @@ StartTaskManager(
55
55
return ret ;
56
56
}
57
57
58
+ static BOOL
59
+ StartUserShell (
60
+ IN OUT PWLSESSION Session )
61
+ {
62
+ LPVOID lpEnvironment = NULL ;
63
+ BOOLEAN Old ;
64
+ BOOL ret ;
65
+
66
+ /* Create environment block for the user */
67
+ if (!CreateEnvironmentBlock (& lpEnvironment , Session -> UserToken , TRUE))
68
+ {
69
+ WARN ("WL: CreateEnvironmentBlock() failed\n" );
70
+ return FALSE;
71
+ }
72
+
73
+ /* Get privilege */
74
+ /* FIXME: who should do it? winlogon or gina? */
75
+ /* FIXME: reverting to lower privileges after creating user shell? */
76
+ RtlAdjustPrivilege (SE_ASSIGNPRIMARYTOKEN_PRIVILEGE , TRUE, FALSE, & Old );
77
+
78
+ ret = Session -> Gina .Functions .WlxActivateUserShell (
79
+ Session -> Gina .Context ,
80
+ L"Default" ,
81
+ NULL , /* FIXME */
82
+ lpEnvironment );
83
+
84
+ DestroyEnvironmentBlock (lpEnvironment );
85
+ return ret ;
86
+ }
87
+
88
+
58
89
BOOL
59
90
SetDefaultLanguage (
60
91
IN BOOL UserProfile )
@@ -167,8 +198,6 @@ HandleLogon(
167
198
IN OUT PWLSESSION Session )
168
199
{
169
200
PROFILEINFOW ProfileInfo ;
170
- LPVOID lpEnvironment = NULL ;
171
- BOOLEAN Old ;
172
201
BOOL ret = FALSE;
173
202
174
203
/* Loading personal settings */
@@ -211,13 +240,6 @@ HandleLogon(
211
240
goto cleanup ;
212
241
}
213
242
214
- /* Create environment block for the user */
215
- if (!CreateEnvironmentBlock (& lpEnvironment , Session -> UserToken , TRUE))
216
- {
217
- WARN ("WL: CreateEnvironmentBlock() failed\n" );
218
- goto cleanup ;
219
- }
220
-
221
243
DisplayStatusMessage (Session , Session -> WinlogonDesktop , IDS_APPLYINGYOURPERSONALSETTINGS );
222
244
UpdatePerUserSystemParameters (0 , TRUE);
223
245
@@ -228,16 +250,7 @@ HandleLogon(
228
250
goto cleanup ;
229
251
}
230
252
231
- /* Get privilege */
232
- /* FIXME: who should do it? winlogon or gina? */
233
- /* FIXME: reverting to lower privileges after creating user shell? */
234
- RtlAdjustPrivilege (SE_ASSIGNPRIMARYTOKEN_PRIVILEGE , TRUE, FALSE, & Old );
235
-
236
- if (!Session -> Gina .Functions .WlxActivateUserShell (
237
- Session -> Gina .Context ,
238
- L"Default" ,
239
- NULL , /* FIXME */
240
- lpEnvironment ))
253
+ if (!StartUserShell (Session ))
241
254
{
242
255
//WCHAR StatusMsg[256];
243
256
WARN ("WL: WlxActivateUserShell() failed\n" );
@@ -264,8 +277,6 @@ HandleLogon(
264
277
{
265
278
UnloadUserProfile (WLSession -> UserToken , ProfileInfo .hProfile );
266
279
}
267
- if (lpEnvironment )
268
- DestroyEnvironmentBlock (lpEnvironment );
269
280
RemoveStatusMessage (Session );
270
281
if (!ret )
271
282
{
@@ -942,12 +953,30 @@ SASWindowProc(
942
953
{
943
954
return HandleMessageBeep (lParam );
944
955
}
956
+ case LN_SHELL_EXITED :
957
+ {
958
+ /* lParam is the exit code */
959
+ if (lParam != 1 )
960
+ {
961
+ SetTimer (hwndDlg , 1 , 1000 , NULL );
962
+ }
963
+ break ;
964
+ }
945
965
default :
946
966
{
947
967
ERR ("WM_LOGONNOTIFY case %d is unimplemented\n" , wParam );
948
968
}
949
969
}
950
970
return 0 ;
971
+ }
972
+ case WM_TIMER :
973
+ {
974
+ if (wParam == 1 )
975
+ {
976
+ KillTimer (hwndDlg , 1 );
977
+ StartUserShell (Session );
978
+ }
979
+ break ;
951
980
}
952
981
case WLX_WM_SAS :
953
982
{
0 commit comments