INT ret;
DWORD ShutdownOptions;
- if (ImpersonateLoggedOnUser(pgContext->UserToken))
- {
- pgContext->nShutdownAction = LoadShutdownSelState();
- ShutdownOptions = GetAllowedShutdownOptions();
- RevertToSelf();
- }
- else
- {
- ERR("WL: ImpersonateLoggedOnUser() failed with error %lu\n", GetLastError());
- pgContext->nShutdownAction = 0;
- ShutdownOptions = 0;
- }
+ TRACE("OnShutDown(%p %p)\n", hwndDlg, pgContext);
- ret = ShutdownDialog(hwndDlg, ShutdownOptions, pgContext);
+ pgContext->nShutdownAction = GetDefaultShutdownSelState();
+ ShutdownOptions = GetDefaultShutdownOptions();
- if (ret == IDOK)
+ if (pgContext->UserToken != NULL)
{
if (ImpersonateLoggedOnUser(pgContext->UserToken))
{
- SaveShutdownSelState(pgContext->nShutdownAction);
+ pgContext->nShutdownAction = LoadShutdownSelState();
+ ShutdownOptions = GetAllowedShutdownOptions();
RevertToSelf();
}
else
}
}
+ ret = ShutdownDialog(hwndDlg, ShutdownOptions, pgContext);
+
+ if (ret == IDOK)
+ {
+ if (pgContext->UserToken != NULL)
+ {
+ if (ImpersonateLoggedOnUser(pgContext->UserToken))
+ {
+ SaveShutdownSelState(pgContext->nShutdownAction);
+ RevertToSelf();
+ }
+ else
+ {
+ ERR("WL: ImpersonateLoggedOnUser() failed with error %lu\n", GetLastError());
+ }
+ }
+ }
+
return ret;
}
/* shutdown.c */
+DWORD
+GetDefaultShutdownSelState(VOID);
+
DWORD
LoadShutdownSelState(VOID);
VOID
SaveShutdownSelState(DWORD ShutdownCode);
+DWORD
+GetDefaultShutdownOptions(VOID);
+
DWORD
GetAllowedShutdownOptions(VOID);
// return (VersionInfo.wProductType == VER_NT_WORKSTATION) ? FALSE : TRUE;
}
+DWORD
+GetDefaultShutdownSelState(VOID)
+{
+ return WLX_SAS_ACTION_SHUTDOWN_POWER_OFF;
+}
DWORD
LoadShutdownSelState(VOID)
RegCloseKey(hKey);
}
+DWORD
+GetDefaultShutdownOptions(VOID)
+{
+ return WLX_SHUTDOWN_STATE_POWER_OFF | WLX_SHUTDOWN_STATE_REBOOT;
+}
+
DWORD
GetAllowedShutdownOptions(VOID)
{
LoadStringW(pContext->pgContext->hDllInstance, DescId, szBuffer, _countof(szBuffer));
SetDlgItemTextW(hDlg, IDC_SHUTDOWN_DESCRIPTION, szBuffer);
+
+ if (pContext->bReasonUI)
+ {
+ EnableWindow(GetDlgItem(hDlg, IDC_REASON_PLANNED), (ShutdownCode != WLX_SAS_ACTION_LOGOFF));
+ EnableWindow(GetDlgItem(hDlg, IDC_REASON_LIST), (ShutdownCode != WLX_SAS_ACTION_LOGOFF));
+ EnableWindow(GetDlgItem(hDlg, IDC_REASON_COMMENT), (ShutdownCode != WLX_SAS_ACTION_LOGOFF));
+ }
}
static VOID