18#define WLX_SHUTDOWN_STATE_LOGOFF 0x01
19#define WLX_SHUTDOWN_STATE_POWER_OFF 0x02
20#define WLX_SHUTDOWN_STATE_REBOOT 0x04
22#define WLX_SHUTDOWN_STATE_SLEEP 0x10
24#define WLX_SHUTDOWN_STATE_HIBERNATE 0x40
28#define FONT_POINT_SIZE 13
30#define DARK_GREY_COLOR RGB(244, 244, 244)
31#define LIGHT_GREY_COLOR RGB(38, 38, 38)
37#define NUMBER_OF_BUTTONS 4
40#define BUTTON_SHUTDOWN 0
41#define BUTTON_SHUTDOWN_PRESSED (CY_BITMAP + BUTTON_SHUTDOWN)
42#define BUTTON_SHUTDOWN_FOCUSED (CY_BITMAP + BUTTON_SHUTDOWN_PRESSED)
43#define BUTTON_REBOOT (CY_BITMAP + BUTTON_SHUTDOWN_FOCUSED)
44#define BUTTON_REBOOT_PRESSED (CY_BITMAP + BUTTON_REBOOT)
45#define BUTTON_REBOOT_FOCUSED (CY_BITMAP + BUTTON_REBOOT_PRESSED)
46#define BUTTON_SLEEP (CY_BITMAP + BUTTON_REBOOT_FOCUSED)
47#define BUTTON_SLEEP_PRESSED (CY_BITMAP + BUTTON_SLEEP)
48#define BUTTON_SLEEP_FOCUSED (CY_BITMAP + BUTTON_SLEEP_PRESSED)
49#define BUTTON_SLEEP_DISABLED (CY_BITMAP + BUTTON_SLEEP_FOCUSED)
79 L"Software\\Policies\\Microsoft\\Windows NT\\Reliability",
100 L"Software\\Microsoft\\Windows\\CurrentVersion\\Reliability",
137 L"SYSTEM\\CurrentControlSet\\Control\\Windows",
150 L"EnforceFriendlyShutdown",
181 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
201 return (dwValue != 0);
229 L"SOFTWARE\\Policies\\Microsoft\\Windows\\System\\Shutdown",
237 L"ShowHibernateButton",
245 return (dwValue != 0);
259 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",
276 return (dwValue != 0);
280 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
298 return (dwValue != 0);
448 L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer",
543 if (hwndTarget != hButton)
587 BOOL bIsSleepButtonReplaced)
597 if (bIsSleepButtonReplaced)
612 HWND hwndTool, hwndTip;
618 tool.
cbSize =
sizeof(tool);
643 BOOL bIsAltKeyPressed,
644 BOOL bIsSleepButtonReplaced)
648 HWND hwndDest, hwndTarget;
653 if (bIsSleepButtonReplaced)
681 if (bIsAltKeyPressed)
683 if (!bIsSleepButtonReplaced)
696 if (!bIsSleepButtonReplaced)
723 L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer",
733 switch (ShutdownCode)
759 (
LPBYTE)&dwValue,
sizeof(dwValue));
796 if (ShutdownCode ==
CB_ERR)
801 switch (ShutdownCode)
830 if (pContext->bReasonUI)
847 WCHAR szBuffer2[256];
855 pContext->hfFont =
CreateFontW(lfHeight, 0, 0, 0,
FW_MEDIUM,
FALSE, 0, 0, 0, 0, 0, 0, 0,
L"MS Shell Dlg");
869 pContext->bIsSleepButtonReplaced =
FALSE;
873 pContext->bIsButtonHot[
i] =
FALSE;
894 else if (pContext->bFriendlyUI)
907 else if (pContext->bFriendlyUI)
922 else if (pContext->bFriendlyUI)
937 else if (pContext->bFriendlyUI)
959 pContext->pgContext->hDllInstance);
963 pContext->pgContext->hDllInstance);
967 pContext->pgContext->hDllInstance);
971 pContext->pgContext->hDllInstance);
1001 pgContext->nShutdownAction =
1171 switch (pdis->
CtlID)
1202 DWORD ShutdownOptions;
1209 Context.pgContext = pgContext;
1210 Context.ShutdownOptions = ShutdownOptions;
1215 if (pgContext->hWlx && pgContext->pWlxFuncs && !
Context.bFriendlyUI)
1218 ret = pgContext->pWlxFuncs->WlxDialogBoxParam(pgContext->hWlx,
1219 pgContext->hDllInstance,
1257 switch (
Msg.message)
1262 if (
Msg.wParam ==
VK_MENU && !bIsAltKeyPressed)
1265 bIsAltKeyPressed =
TRUE;
1283 pgContext->hDllInstance,
1285 Context.bIsSleepButtonReplaced);
1303 pgContext->hDllInstance,
1305 Context.bIsSleepButtonReplaced);
1351 DWORD ShutdownOptions;
1364 ShutdownOptions &= ~WLX_SHUTDOWN_STATE_LOGOFF;
1380 if (dlgValue ==
IDOK)
1409 else if (dlgValue ==
IDHELP)
1411 FIXME(
"Help is not implemented yet.\n");
1414 else if (dlgValue == -1)
1416 ERR(
"Failed to create dialog\n");
OSVERSIONINFOW VersionInfo
static INT_PTR CALLBACK ShutdownDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
#define RegCloseKey(hKey)
static HINSTANCE hDllInstance
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegOpenCurrentUser(IN REGSAM samDesired, OUT PHKEY phkResult)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
#define IDC_BUTTON_HIBERNATE
#define IDS_SHUTDOWN_LOGOFF_DESC
#define IDC_TURN_OFF_STATIC
#define IDS_SHUTDOWN_RESTART_DESC
#define IDD_SHUTDOWN_FANCY
#define IDS_SHUTDOWN_LOGOFF
#define IDS_SHUTDOWN_SHUTDOWN_DESC
#define IDC_SHUTDOWN_STATIC
#define IDS_SHUTDOWN_SLEEP_DESC
#define IDS_SHUTDOWN_SHUTDOWN
#define IDS_SHUTDOWN_HIBERNATE_DESC
#define IDC_REASON_COMMENT
#define IDS_SHUTDOWN_SLEEP
#define IDS_SHUTDOWN_RESTART
#define IDC_BUTTON_REBOOT
#define IDC_REASON_PLANNED
#define IDC_HIBERNATE_STATIC
#define IDC_SHUTDOWN_ACTION
#define IDD_SHUTDOWN_REASON
#define IDC_BUTTON_SHUTDOWN
#define IDC_RESTART_STATIC
#define IDS_SHUTDOWN_HIBERNATE
#define IDC_SHUTDOWN_DESCRIPTION
#define IDD_SHUTDOWN_FANCY_LONG
#define BUTTON_SLEEP_DISABLED
static VOID ShutdownOnOk(IN HWND hDlg, IN PGINA_CONTEXT pgContext)
DWORD GetAllowedShutdownOptions(VOID)
#define WLX_SHUTDOWN_STATE_REBOOT
DWORD WINAPI ShellTurnOffDialog(HWND hWnd)
DWORD LoadShutdownSelState(VOID)
static BOOL GetShutdownReasonUI(VOID)
#define BUTTON_REBOOT_PRESSED
static BOOL ForceFriendlyUI(VOID)
#define BUTTON_SLEEP_FOCUSED
#define WLX_SHUTDOWN_STATE_LOGOFF
#define WLX_SHUTDOWN_STATE_SLEEP
static BOOL IsFriendlyUIActive(VOID)
VOID CreateToolTipForButtons(int controlID, int detailID, HWND hDlg, int titleID, HINSTANCE hInst)
static BOOL IsShowHibernateButtonActive(VOID)
static VOID ShutdownOnInit(IN HWND hDlg, IN PSHUTDOWN_DLG_CONTEXT pContext)
static INT_PTR CALLBACK OwnerDrawButtonSubclass(HWND hButton, UINT uMsg, WPARAM wParam, LPARAM lParam)
VOID AddPrefixToStaticTexts(HWND hDlg, BOOL bIsSleepButtonReplaced)
struct _SHUTDOWN_DLG_CONTEXT * PSHUTDOWN_DLG_CONTEXT
static BOOL IsDomainMember(VOID)
static BOOL DrawIconOnOwnerDrawnButtons(DRAWITEMSTRUCT *pdis, PSHUTDOWN_DLG_CONTEXT pContext)
#define BUTTON_SHUTDOWN_PRESSED
DWORD WINAPI ShellShutdownDialog(HWND hParent, LPWSTR lpUsername, BOOL bHideLogoff)
BOOL WINAPI ShellIsFriendlyUIActive(VOID)
DWORD GetDefaultShutdownSelState(VOID)
#define NUMBER_OF_BUTTONS
INT_PTR ShutdownDialog(IN HWND hwndDlg, IN DWORD ShutdownOptions, IN PGINA_CONTEXT pgContext)
static VOID UpdateShutdownDesc(IN HWND hDlg, IN PSHUTDOWN_DLG_CONTEXT pContext)
#define BUTTON_SLEEP_PRESSED
VOID ReplaceRequiredButton(HWND hDlg, HINSTANCE hInstance, BOOL bIsAltKeyPressed, BOOL bIsSleepButtonReplaced)
#define WLX_SHUTDOWN_STATE_POWER_OFF
#define BUTTON_REBOOT_FOCUSED
#define WLX_SHUTDOWN_STATE_HIBERNATE
DWORD GetDefaultShutdownOptions(VOID)
#define BUTTON_SHUTDOWN_FOCUSED
VOID SaveShutdownSelState(IN DWORD ShutdownCode)
static BOOL IsNetwareActive(VOID)
struct _SHUTDOWN_DLG_CONTEXT SHUTDOWN_DLG_CONTEXT
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
unsigned __int3264 UINT_PTR
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
#define REG_OPTION_NON_VOLATILE
#define UNREFERENCED_PARAMETER(P)
BOOLEAN WINAPI IsPwrHibernateAllowed(VOID)
BOOLEAN WINAPI SetSuspendState(BOOLEAN Hibernate, BOOLEAN ForceCritical, BOOLEAN DisableWakeEvent)
BOOLEAN WINAPI IsPwrSuspendAllowed(VOID)
#define TTM_SETMAXTIPWIDTH
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
ULONG dwOSVersionInfoSize
BOOL bIsButtonHot[NUMBER_OF_BUTTONS]
BOOL bIsSleepButtonReplaced
TW_UINT32 TW_UINT16 TW_UINT16 MSG
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
HFONT WINAPI CreateFontW(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI DeleteDC(_In_ HDC)
#define HKEY_LOCAL_MACHINE
HWND WINAPI SetCapture(_In_ HWND hWnd)
HWND WINAPI CreateDialogParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_CTLCOLORSTATIC
#define GetWindowLongPtrW
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI ReleaseCapture(void)
BOOL WINAPI IsDialogMessageW(_In_ HWND, _In_ LPMSG)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
HWND WINAPI GetCapture(void)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HWND WINAPI SetFocus(_In_opt_ HWND)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
HDC WINAPI GetDC(_In_opt_ HWND)
#define MB_ICONEXCLAMATION
HWND WINAPI GetParent(_In_ HWND)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
BOOL WINAPI ExitWindowsEx(_In_ UINT, _In_ DWORD)
HWND WINAPI WindowFromPoint(_In_ POINT)
int WINAPI GetDlgCtrlID(_In_ HWND)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI DrawStateW(_In_ HDC, _In_opt_ HBRUSH, _In_opt_ DRAWSTATEPROC, _In_ LPARAM, _In_ WPARAM, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
BOOL WINAPI DestroyWindow(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF
#define WLX_SAS_ACTION_SHUTDOWN_SLEEP
#define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE
#define WLX_SAS_ACTION_SHUTDOWN_REBOOT
#define WLX_SAS_ACTION_LOGOFF