#define HK_CTRL_ALT_DEL 0
#define HK_CTRL_SHIFT_ESC 1
-extern BOOL WINAPI SetLogonNotifyWindow(HWND Wnd, HWINSTA WinSta);
-
/* FUNCTIONS ****************************************************************/
static BOOL
return ret;
}
+static BOOL
+StartUserShell(
+ IN OUT PWLSESSION Session)
+{
+ LPVOID lpEnvironment = NULL;
+ BOOLEAN Old;
+ BOOL ret;
+
+ /* Create environment block for the user */
+ if (!CreateEnvironmentBlock(&lpEnvironment, Session->UserToken, TRUE))
+ {
+ WARN("WL: CreateEnvironmentBlock() failed\n");
+ return FALSE;
+ }
+
+ /* Get privilege */
+ /* FIXME: who should do it? winlogon or gina? */
+ /* FIXME: reverting to lower privileges after creating user shell? */
+ RtlAdjustPrivilege(SE_ASSIGNPRIMARYTOKEN_PRIVILEGE, TRUE, FALSE, &Old);
+
+ ret = Session->Gina.Functions.WlxActivateUserShell(
+ Session->Gina.Context,
+ L"Default",
+ NULL, /* FIXME */
+ lpEnvironment);
+
+ DestroyEnvironmentBlock(lpEnvironment);
+ return ret;
+}
+
+
BOOL
SetDefaultLanguage(
IN BOOL UserProfile)
IN OUT PWLSESSION Session)
{
PROFILEINFOW ProfileInfo;
- LPVOID lpEnvironment = NULL;
- BOOLEAN Old;
BOOL ret = FALSE;
/* Loading personal settings */
goto cleanup;
}
- /* Create environment block for the user */
- if (!CreateEnvironmentBlock(&lpEnvironment, Session->UserToken, TRUE))
- {
- WARN("WL: CreateEnvironmentBlock() failed\n");
- goto cleanup;
- }
-
DisplayStatusMessage(Session, Session->WinlogonDesktop, IDS_APPLYINGYOURPERSONALSETTINGS);
UpdatePerUserSystemParameters(0, TRUE);
goto cleanup;
}
- /* Get privilege */
- /* FIXME: who should do it? winlogon or gina? */
- /* FIXME: reverting to lower privileges after creating user shell? */
- RtlAdjustPrivilege(SE_ASSIGNPRIMARYTOKEN_PRIVILEGE, TRUE, FALSE, &Old);
-
- if (!Session->Gina.Functions.WlxActivateUserShell(
- Session->Gina.Context,
- L"Default",
- NULL, /* FIXME */
- lpEnvironment))
+ if (!StartUserShell(Session))
{
//WCHAR StatusMsg[256];
WARN("WL: WlxActivateUserShell() failed\n");
{
UnloadUserProfile(WLSession->UserToken, ProfileInfo.hProfile);
}
- if (lpEnvironment)
- DestroyEnvironmentBlock(lpEnvironment);
RemoveStatusMessage(Session);
if (!ret)
{
return STATUS_SUCCESS;
}
+BOOL
+WINAPI
+HandleMessageBeep(UINT uType)
+{
+ LPWSTR EventName;
+
+ switch(uType)
+ {
+ case 0xFFFFFFFF:
+ EventName = NULL;
+ break;
+ case MB_OK:
+ EventName = L"SystemDefault";
+ break;
+ case MB_ICONASTERISK:
+ EventName = L"SystemAsterisk";
+ break;
+ case MB_ICONEXCLAMATION:
+ EventName = L"SystemExclamation";
+ break;
+ case MB_ICONHAND:
+ EventName = L"SystemHand";
+ break;
+ case MB_ICONQUESTION:
+ EventName = L"SystemQuestion";
+ break;
+ default:
+ WARN("Unhandled type %d\n", uType);
+ EventName = L"SystemDefault";
+ }
+
+ return PlaySoundRoutine(EventName, FALSE, SND_ALIAS | SND_NOWAIT | SND_NOSTOP | SND_ASYNC);
+}
+
static LRESULT CALLBACK
SASWindowProc(
IN HWND hwndDlg,
}
return TRUE;
}
+ case WM_LOGONNOTIFY:
+ {
+ switch(wParam)
+ {
+ case LN_MESSAGE_BEEP:
+ {
+ return HandleMessageBeep(lParam);
+ }
+ case LN_SHELL_EXITED:
+ {
+ /* lParam is the exit code */
+ if(lParam != 1)
+ {
+ SetTimer(hwndDlg, 1, 1000, NULL);
+ }
+ break;
+ }
+ default:
+ {
+ ERR("WM_LOGONNOTIFY case %d is unimplemented\n", wParam);
+ }
+ }
+ return 0;
+ }
+ case WM_TIMER:
+ {
+ if (wParam == 1)
+ {
+ KillTimer(hwndDlg, 1);
+ StartUserShell(Session);
+ }
+ break;
+ }
case WLX_WM_SAS:
{
DispatchSAS(Session, (DWORD)wParam);