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;
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");
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE
BOOLEAN WINAPI SetSuspendState(BOOLEAN Hibernate, BOOLEAN ForceCritical, BOOLEAN DisableWakeEvent)
static BOOL IsShowHibernateButtonActive(VOID)
unsigned __int3264 UINT_PTR
BOOL WINAPI TranslateMessage(_In_ const MSG *)
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
#define WLX_SHUTDOWN_STATE_SLEEP
#define IDC_TURN_OFF_STATIC
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)
BOOLEAN WINAPI IsPwrSuspendAllowed(VOID)
DWORD LoadShutdownSelState(VOID)
#define IDS_SHUTDOWN_RESTART_DESC
static INT_PTR CALLBACK ShutdownDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
VOID AddPrefixToStaticTexts(HWND hDlg, BOOL bIsSleepButtonReplaced)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define BUTTON_SLEEP_FOCUSED
static INT_PTR CALLBACK OwnerDrawButtonSubclass(HWND hButton, UINT uMsg, WPARAM wParam, LPARAM lParam)
HDC WINAPI GetDC(_In_opt_ HWND)
#define BUTTON_REBOOT_PRESSED
DWORD GetDefaultShutdownSelState(VOID)
#define UNREFERENCED_PARAMETER(P)
VOID ReplaceRequiredButton(HWND hDlg, HINSTANCE hInstance, BOOL bIsAltKeyPressed, BOOL bIsSleepButtonReplaced)
GLuint GLuint GLsizei count
#define WLX_SHUTDOWN_STATE_HIBERNATE
#define WM_CTLCOLORSTATIC
DWORD WINAPI ShellTurnOffDialog(HWND hWnd)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
static VOID ShutdownOnInit(IN HWND hDlg, IN PSHUTDOWN_DLG_CONTEXT pContext)
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
#define IDS_SHUTDOWN_LOGOFF_DESC
#define IDC_SHUTDOWN_DESCRIPTION
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define IDC_HIBERNATE_STATIC
HWND WINAPI SetFocus(_In_opt_ HWND)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
INT_PTR ShutdownDialog(IN HWND hwndDlg, IN DWORD ShutdownOptions, IN PGINA_CONTEXT pgContext)
#define GetWindowLongPtrW
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
static BOOL IsDomainMember(VOID)
#define IDS_SHUTDOWN_SLEEP_DESC
BOOL WINAPI DestroyWindow(_In_ HWND)
#define BUTTON_SLEEP_DISABLED
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL bIsSleepButtonReplaced
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
static BOOL IsNetwareActive(VOID)
DWORD GetDefaultShutdownOptions(VOID)
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)
#define WLX_SHUTDOWN_STATE_POWER_OFF
OSVERSIONINFOW VersionInfo
#define MB_ICONEXCLAMATION
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
int WINAPI GetDlgCtrlID(_In_ HWND)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
HWND WINAPI GetCapture(void)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define IDS_SHUTDOWN_RESTART
DWORD GetAllowedShutdownOptions(VOID)
#define WLX_SAS_ACTION_LOGOFF
#define IDC_REASON_PLANNED
#define IDS_SHUTDOWN_SHUTDOWN
struct _SHUTDOWN_DLG_CONTEXT * PSHUTDOWN_DLG_CONTEXT
#define IDC_BUTTON_SHUTDOWN
static HINSTANCE hDllInstance
#define IDC_SHUTDOWN_ACTION
#define REG_OPTION_NON_VOLATILE
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
#define WLX_SHUTDOWN_STATE_LOGOFF
static BOOL DrawIconOnOwnerDrawnButtons(DRAWITEMSTRUCT *pdis, PSHUTDOWN_DLG_CONTEXT pContext)
#define IDD_SHUTDOWN_FANCY_LONG
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDC_SHUTDOWN_STATIC
ULONG dwOSVersionInfoSize
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define TTM_SETMAXTIPWIDTH
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define IDS_SHUTDOWN_LOGOFF
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static BOOL IsFriendlyUIActive(VOID)
#define NUMBER_OF_BUTTONS
#define IDS_SHUTDOWN_HIBERNATE
#define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF
DWORD WINAPI ShellShutdownDialog(HWND hParent, LPWSTR lpUsername, BOOL bHideLogoff)
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)
#define BUTTON_SHUTDOWN_FOCUSED
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)
#define BUTTON_SHUTDOWN_PRESSED
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define BUTTON_REBOOT_FOCUSED
#define IDC_REASON_COMMENT
BOOL WINAPI ExitWindowsEx(_In_ UINT, _In_ DWORD)
struct _SHUTDOWN_DLG_CONTEXT SHUTDOWN_DLG_CONTEXT
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
#define IDS_SHUTDOWN_SLEEP
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
HWND WINAPI GetParent(_In_ HWND)
HWND WINAPI SetCapture(_In_ HWND hWnd)
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
BOOL WINAPI DeleteDC(_In_ HDC)
static BOOL GetShutdownReasonUI(VOID)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
#define WLX_SAS_ACTION_SHUTDOWN_SLEEP
#define IDC_BUTTON_REBOOT
#define BUTTON_SLEEP_PRESSED
#define WLX_SHUTDOWN_STATE_REBOOT
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
#define IDD_SHUTDOWN_REASON
static BOOL ForceFriendlyUI(VOID)
#define IDC_BUTTON_HIBERNATE
GLint GLint GLint GLint GLint GLint y
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
HWND WINAPI WindowFromPoint(_In_ POINT)
#define IDS_SHUTDOWN_HIBERNATE_DESC
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
BOOL bIsButtonHot[NUMBER_OF_BUTTONS]
BOOL WINAPI ReleaseCapture(void)
LONG WINAPI RegOpenCurrentUser(IN REGSAM samDesired, OUT PHKEY phkResult)
struct tagContext Context
#define WLX_SAS_ACTION_SHUTDOWN_REBOOT
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IDS_SHUTDOWN_SHUTDOWN_DESC
HWND WINAPI CreateDialogParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
#define IDC_RESTART_STATIC
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
static VOID ShutdownOnOk(IN HWND hDlg, IN PGINA_CONTEXT pgContext)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SetWindowLongPtrW
#define MAKEINTRESOURCEW(i)
VOID CreateToolTipForButtons(int controlID, int detailID, HWND hDlg, int titleID, HINSTANCE hInst)
VOID SaveShutdownSelState(IN DWORD ShutdownCode)
BOOLEAN WINAPI IsPwrHibernateAllowed(VOID)
#define IDD_SHUTDOWN_FANCY
BOOL WINAPI IsDialogMessageW(_In_ HWND, _In_ LPMSG)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define RegCloseKey(hKey)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
BOOL WINAPI ShellIsFriendlyUIActive(VOID)
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)
static VOID UpdateShutdownDesc(IN HWND hDlg, IN PSHUTDOWN_DLG_CONTEXT pContext)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
#define HKEY_LOCAL_MACHINE