[MSGINA]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 18 Sep 2016 19:37:25 +0000 (19:37 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 18 Sep 2016 19:37:25 +0000 (19:37 +0000)
- Do not hardcode buffer sizes in function calls, and use _countof when needed.
- Use explicit unicode functions where possible.
- No need to have 342687 versions of the shutdown dialog in msgina, only one is sufficient. The help button should be either shown or hidden, depending on whom is calling the dialog (shell or winlogon) (this is TODO!)
- Therefore, no need to have twice the (almost) same code for the shutdown dialog.
- Fix & rework said code.
- The old duplicated shutdown dialog now becomes the "template" for the "Luna-XP-style Shut Down dialog" (implementation TODO!)
- Reenable the WM_ACTIVATE code that was added in r72720 and temporarily disabled in r72721.
CORE-7559 #comment Numerous fixes committed in r72732.

svn path=/trunk/; revision=72732

26 files changed:
reactos/dll/win32/msgina/gui.c
reactos/dll/win32/msgina/lang/bg-BG.rc
reactos/dll/win32/msgina/lang/cs-CZ.rc
reactos/dll/win32/msgina/lang/de-DE.rc
reactos/dll/win32/msgina/lang/en-US.rc
reactos/dll/win32/msgina/lang/es-ES.rc
reactos/dll/win32/msgina/lang/fr-FR.rc
reactos/dll/win32/msgina/lang/he-IL.rc
reactos/dll/win32/msgina/lang/id-ID.rc
reactos/dll/win32/msgina/lang/it-IT.rc
reactos/dll/win32/msgina/lang/ja-JP.rc
reactos/dll/win32/msgina/lang/no-NO.rc
reactos/dll/win32/msgina/lang/pl-PL.rc
reactos/dll/win32/msgina/lang/ro-RO.rc
reactos/dll/win32/msgina/lang/ru-RU.rc
reactos/dll/win32/msgina/lang/sk-SK.rc
reactos/dll/win32/msgina/lang/sq-AL.rc
reactos/dll/win32/msgina/lang/tr-TR.rc
reactos/dll/win32/msgina/lang/uk-UA.rc
reactos/dll/win32/msgina/lang/zh-CN.rc
reactos/dll/win32/msgina/lang/zh-TW.rc
reactos/dll/win32/msgina/msgina.c
reactos/dll/win32/msgina/msgina.h
reactos/dll/win32/msgina/resource.h
reactos/dll/win32/msgina/shutdown.c
reactos/dll/win32/msgina/tui.c

index e31cb17..ca46bac 100644 (file)
@@ -93,9 +93,9 @@ StartupWindowThread(LPVOID lpParam)
         return FALSE;
     }
 
-    DialogBoxParam(
+    DialogBoxParamW(
         hDllInstance,
-        MAKEINTRESOURCE(IDD_STATUSWINDOW_DLG),
+        MAKEINTRESOURCEW(IDD_STATUSWINDOW_DLG),
         GetDesktopWindow(),
         StatusMessageWindowProc,
         (LPARAM)lpParam);
@@ -126,7 +126,7 @@ GUIDisplayStatusMessage(
          */
         msg = (PDISPLAYSTATUSMSG)HeapAlloc(GetProcessHeap(),
                                            HEAP_ZERO_MEMORY,
-                                           sizeof(DISPLAYSTATUSMSG));
+                                           sizeof(*msg));
         if(!msg)
             return FALSE;
 
@@ -136,10 +136,7 @@ GUIDisplayStatusMessage(
         msg->pMessage = pMessage;
         msg->hDesktop = hDesktop;
 
-        msg->StartupEvent = CreateEventW(NULL,
-                                         TRUE,
-                                         FALSE,
-                                         NULL);
+        msg->StartupEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
 
         if (!msg->StartupEvent)
         {
@@ -204,25 +201,26 @@ EmptyWindowProc(
 {
     PGINA_CONTEXT pgContext;
     
-    pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
+    pgContext = (PGINA_CONTEXT)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
 
     switch (uMsg)
     {
         case WM_INITDIALOG:
         {
             pgContext = (PGINA_CONTEXT)lParam;
-            pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
-            SetWindowLongPtr(hwndDlg, GWL_USERDATA, (LONG_PTR)pgContext);
+            SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pgContext);
+
+            /* Draw the logo bitmap */
+            pgContext->hBitmap = LoadImageW(pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
             return TRUE;
         }
         case WM_PAINT:
         {
             PAINTSTRUCT ps;
-            HDC hdc;
             if (pgContext->hBitmap)
             {
-                hdc = BeginPaint(hwndDlg, &ps);
-                DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
+                BeginPaint(hwndDlg, &ps);
+                DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
                 EndPaint(hwndDlg, &ps);
             }
             return TRUE;
@@ -288,8 +286,8 @@ ResourceMessageBox(
     WCHAR szCaption[256];
     WCHAR szText[256];
 
-    LoadStringW(pgContext->hDllInstance, uCaption, szCaption, 256);
-    LoadStringW(pgContext->hDllInstance, uText, szText, 256);
+    LoadStringW(pgContext->hDllInstance, uCaption, szCaption, _countof(szCaption));
+    LoadStringW(pgContext->hDllInstance, uText, szText, _countof(szText));
 
     return pgContext->pWlxFuncs->WlxMessageBox(pgContext->hWlx,
                                                hwnd,
@@ -319,11 +317,11 @@ DoChangePassword(
     NTSTATUS ProtocolStatus;
     NTSTATUS Status;
 
-    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_USERNAME, UserName, 256);
-    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_DOMAIN, Domain, 256);
-    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_OLDPWD, OldPassword, 256);
-    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_NEWPWD1, NewPassword1, 256);
-    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_NEWPWD2, NewPassword2, 256);
+    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_USERNAME, UserName, _countof(UserName));
+    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_DOMAIN, Domain, _countof(Domain));
+    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_OLDPWD, OldPassword, _countof(OldPassword));
+    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_NEWPWD1, NewPassword1, _countof(NewPassword1));
+    GetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_NEWPWD2, NewPassword2, _countof(NewPassword2));
 
     /* Compare the two passwords and fail if they do not match */
     if (wcscmp(NewPassword1, NewPassword2) != 0)
@@ -440,7 +438,7 @@ DoChangePassword(
         (wcscmp(Domain, pgContext->Domain) == 0) &&
         (wcscmp(OldPassword, pgContext->Password) == 0))
     {
-        ZeroMemory(pgContext->Password, 256 * sizeof(WCHAR));
+        ZeroMemory(pgContext->Password, sizeof(pgContext->Password));
         wcscpy(pgContext->Password, NewPassword1);
     }
 
@@ -464,19 +462,21 @@ ChangePasswordDialogProc(
 {
     PGINA_CONTEXT pgContext;
 
-    pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
+    pgContext = (PGINA_CONTEXT)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
 
     switch (uMsg)
     {
         case WM_INITDIALOG:
+        {
             pgContext = (PGINA_CONTEXT)lParam;
-            SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
+            SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pgContext);
 
             SetDlgItemTextW(hwndDlg, IDC_CHANGEPWD_USERNAME, pgContext->UserName);
             SendDlgItemMessageW(hwndDlg, IDC_CHANGEPWD_DOMAIN, CB_ADDSTRING, 0, (LPARAM)pgContext->Domain);
             SendDlgItemMessageW(hwndDlg, IDC_CHANGEPWD_DOMAIN, CB_SETCURSEL, 0, 0);
             SetFocus(GetDlgItem(hwndDlg, IDC_CHANGEPWD_OLDPWD));
             return TRUE;
+        }
 
         case WM_COMMAND:
             switch (LOWORD(wParam))
@@ -518,26 +518,26 @@ OnInitSecurityDlg(HWND hwnd,
     WCHAR Buffer3[256];
     WCHAR Buffer4[512];
 
-    LoadStringW(pgContext->hDllInstance, IDS_LOGONMSG, Buffer1, 256);
+    LoadStringW(pgContext->hDllInstance, IDS_LOGONMSG, Buffer1, _countof(Buffer1));
 
     wsprintfW(Buffer2, L"%s\\%s", pgContext->Domain, pgContext->UserName);
     wsprintfW(Buffer4, Buffer1, Buffer2);
 
     SetDlgItemTextW(hwnd, IDC_LOGONMSG, Buffer4);
 
-    LoadStringW(pgContext->hDllInstance, IDS_LOGONDATE, Buffer1, 256);
+    LoadStringW(pgContext->hDllInstance, IDS_LOGONDATE, Buffer1, _countof(Buffer1));
 
     GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE,
-                   (SYSTEMTIME*)&pgContext->LogonTime, NULL, Buffer2, 256);
+                   (SYSTEMTIME*)&pgContext->LogonTime, NULL, Buffer2, _countof(Buffer2));
 
     GetTimeFormatW(LOCALE_USER_DEFAULT, 0,
-                   (SYSTEMTIME*)&pgContext->LogonTime, NULL, Buffer3, 256);
+                   (SYSTEMTIME*)&pgContext->LogonTime, NULL, Buffer3, _countof(Buffer3));
 
     wsprintfW(Buffer4, Buffer1, Buffer2, Buffer3);
 
     SetDlgItemTextW(hwnd, IDC_LOGONDATE, Buffer4);
 
-    if (pgContext->bAutoAdminLogon == TRUE)
+    if (pgContext->bAutoAdminLogon)
         EnableWindow(GetDlgItem(hwnd, IDC_LOGOFF), FALSE);
 }
 
@@ -616,217 +616,25 @@ OnLogOff(
 
 
 static
-VOID
-UpdateShutdownDesc(
-    IN HWND hwnd)
-{
-    WCHAR szBuffer[256];
-    UINT shutdownDescId = 0;
-    int shutdownCode = 0;
-
-    shutdownCode = SendDlgItemMessageW(hwnd, IDC_SHUTDOWN_LIST, CB_GETCURSEL, 0, 0);
-
-    switch (shutdownCode)
-    {
-        case 0: /* Log off */
-            shutdownDescId = IDS_SHUTDOWN_LOGOFF_DESC;
-            break;
-
-        case 1: /* Shut down */
-            shutdownDescId = IDS_SHUTDOWN_SHUTDOWN_DESC;
-            break;
-
-        case 2: /* Restart */
-            shutdownDescId = IDS_SHUTDOWN_RESTART_DESC;
-            break;
-
-        case 3: /* Sleep */
-            shutdownDescId = IDS_SHUTDOWN_SLEEP_DESC;
-            break;
-
-        case 4: /* Hibernate */
-            shutdownDescId = IDS_SHUTDOWN_HIBERNATE_DESC;
-            break;
-
-        default:
-            break;
-    }
-
-    LoadStringW(hDllInstance, shutdownDescId, szBuffer, sizeof(szBuffer));
-    SetDlgItemTextW(hwnd, IDC_SHUTDOWN_DESCRIPTION, szBuffer);
-}
-
-
-static
-VOID
-ShutDownOnInit(
-    IN HWND hwndDlg,
-    IN PGINA_CONTEXT pgContext)
-{
-    WCHAR szBuffer[256];
-    WCHAR szBuffer2[256];
-    HWND hwndList;
-    INT idx, count, i;
-
-    hwndList = GetDlgItem(hwndDlg, IDC_SHUTDOWN_LIST);
-
-    /* Clears the content before it's used */
-    SendMessageW(hwndList, CB_RESETCONTENT, 0, 0);
-
-    /* Log off */
-    LoadStringW(hDllInstance, IDS_SHUTDOWN_LOGOFF, szBuffer, sizeof(szBuffer) / sizeof(WCHAR));
-    wsprintfW(szBuffer2, szBuffer, pgContext->UserName);
-    idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer2);
-    if (idx != CB_ERR)
-        SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_LOGOFF);
-
-    /* Shut down */
-    LoadStringW(hDllInstance, IDS_SHUTDOWN_SHUTDOWN, szBuffer, sizeof(szBuffer) / sizeof(WCHAR));
-    idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer);
-    if (idx != CB_ERR)
-        SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
-
-    /* Restart */
-    LoadStringW(hDllInstance, IDS_SHUTDOWN_RESTART, szBuffer, sizeof(szBuffer) / sizeof(WCHAR));
-    idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer);
-    if (idx != CB_ERR)
-        SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_SHUTDOWN_REBOOT);
-
-    /* Sleep */
-#if 0
-    LoadStringW(hDllInstance, IDS_SHUTDOWN_SLEEP, szBuffer, sizeof(szBuffer) / sizeof(WCHAR));
-    idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer);
-    if (idx != CB_ERR)
-        SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_SHUTDOWN_SLEEP);
-#endif
-
-    /* Hibernate */
-#if 0
-    LoadStringW(hDllInstance, IDS_SHUTDOWN_HIBERNATE, szBuffer, sizeof(szBuffer) / sizeof(WCHAR));
-    idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer);
-    if (idx != CB_ERR)
-        SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_SHUTDOWN_HIBERNATE);
-#endif
-
-    /* Sets the default shut down selection */
-    count = SendMessageW(hwndList, CB_GETCOUNT, 0, 0);
-    for (i = 0; i < count; i++)
-    {
-        if (pgContext->nShutdownAction == SendMessageW(hwndList, CB_GETITEMDATA, i, 0))
-        {
-            SendMessageW(hwndList, CB_SETCURSEL, i, 0);
-            break;
-        }
-    }
-
-    /* Updates the choice description based on the current selection */
-    UpdateShutdownDesc(hwndDlg);
-}
-
-
-static
-VOID
-ShutDownOnOk(
+INT
+OnShutDown(
     IN HWND hwndDlg,
     IN PGINA_CONTEXT pgContext)
 {
-    INT idx;
-
-    idx = SendDlgItemMessageW(hwndDlg,
-                              IDC_SHUTDOWN_LIST,
-                              CB_GETCURSEL,
-                              0,
-                              0);
-    if (idx != CB_ERR)
-    {
-        pgContext->nShutdownAction = SendDlgItemMessageW(hwndDlg,
-                                                         IDC_SHUTDOWN_LIST,
-                                                         CB_GETITEMDATA,
-                                                         idx,
-                                                         0);
-    }
-}
-
-
-BOOL
-CALLBACK
-ShutDownDialogProc(
-    HWND hwnd,
-    UINT Message,
-    WPARAM wParam,
-    LPARAM lParam)
-{
-    PGINA_CONTEXT pgContext;
-
-    pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwnd, GWL_USERDATA);
-
-    switch (Message)
-    {
-        case WM_INITDIALOG:
-            pgContext = (PGINA_CONTEXT)lParam;
-            SetWindowLongPtr(hwnd, GWL_USERDATA, (INT_PTR)pgContext);
-
-            ShutDownOnInit(hwnd, pgContext);
-
-            /* Draw the logo graphic */
-            pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
-            return TRUE;
-
-        case WM_PAINT:
-        {
-            PAINTSTRUCT ps;
-            HDC hdc;
-            if (pgContext->hBitmap)
-            {
-                hdc = BeginPaint(hwnd, &ps);
-                DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
-                EndPaint(hwnd, &ps);
-            }
-            return TRUE;
-        }
+    INT ret;
+    DWORD ShutdownOptions;
 
-        case WM_DESTROY:
-            DeleteObject(pgContext->hBitmap);
-            return TRUE;
+    // FIXME: User impersonation!!
+    pgContext->nShutdownAction = LoadShutdownSelState();
+    ShutdownOptions = GetAllowedShutdownOptions();
 
-        case WM_COMMAND:
-            switch(LOWORD(wParam))
-            {
-                case IDOK:
-                    ShutDownOnOk(hwnd, pgContext);
-                    EndDialog(hwnd, IDOK);
-                    break;
+    ret = ShutdownDialog(hwndDlg, ShutdownOptions, pgContext);
 
-                case IDCANCEL:
-                    EndDialog(hwnd, IDCANCEL);
-                    break;
+    // FIXME: User impersonation!!
+    if (ret == IDOK)
+        SaveShutdownSelState(pgContext->nShutdownAction);
 
-                case IDC_SHUTDOWN_LIST:
-                    UpdateShutdownDesc(hwnd);
-                    break;
-            }
-            break;
-
-        default:
-            return FALSE;
-    }
-    return TRUE;
-}
-
-
-static
-INT
-OnShutDown(
-    IN HWND hwndDlg,
-    IN PGINA_CONTEXT pgContext)
-{
-    return pgContext->pWlxFuncs->WlxDialogBoxParam(
-        pgContext->hWlx,
-        pgContext->hDllInstance,
-        MAKEINTRESOURCEW(IDD_SHUTDOWN_DLG),
-        hwndDlg,
-        ShutDownDialogProc,
-        (LPARAM)pgContext);
+    return ret;
 }
 
 
@@ -839,14 +647,14 @@ LoggedOnWindowProc(
 {
     PGINA_CONTEXT pgContext;
 
-    pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
+    pgContext = (PGINA_CONTEXT)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
 
     switch (uMsg)
     {
         case WM_INITDIALOG:
         {
             pgContext = (PGINA_CONTEXT)lParam;
-            SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
+            SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pgContext);
 
             OnInitSecurityDlg(hwndDlg, (PGINA_CONTEXT)lParam);
             SetFocus(GetDlgItem(hwndDlg, IDNO));
@@ -980,7 +788,7 @@ DoLogon(
         }
         else if (SubStatus == STATUS_ACCOUNT_LOCKED_OUT)
         {
-TRACE("Account locked!\n");
+            TRACE("Account locked!\n");
             pgContext->pWlxFuncs->WlxMessageBox(pgContext->hWlx,
                                                 hwndDlg,
                                                 L"Account locked!",
@@ -1022,7 +830,7 @@ TRACE("Account locked!\n");
         }
         else
         {
-TRACE("Other error!\n");
+            TRACE("Other error!\n");
             pgContext->pWlxFuncs->WlxMessageBox(pgContext->hWlx,
                                                 hwndDlg,
                                                 L"Other error!",
@@ -1033,8 +841,7 @@ TRACE("Other error!\n");
     }
     else if (!NT_SUCCESS(Status))
     {
-TRACE("DoLoginTasks failed! Status 0x%08lx\n", Status);
-
+        TRACE("DoLoginTasks failed! Status 0x%08lx\n", Status);
         goto done;
     }
 
@@ -1045,7 +852,7 @@ TRACE("DoLoginTasks failed! Status 0x%08lx\n", Status);
         goto done;
     }
 
-    ZeroMemory(pgContext->Password, 256 * sizeof(WCHAR));
+    ZeroMemory(pgContext->Password, sizeof(pgContext->Password));
     wcscpy(pgContext->Password, Password);
 
     result = TRUE;
@@ -1077,7 +884,7 @@ SetDomainComboBox(
 
     SendMessageW(hwndDomainComboBox, CB_RESETCONTENT, 0, 0);
 
-    dwComputerNameLength = sizeof(szComputerName) / sizeof(WCHAR);
+    dwComputerNameLength = _countof(szComputerName);
     if (GetComputerNameW(szComputerName, &dwComputerNameLength))
     {
         lIndex = SendMessageW(hwndDomainComboBox, CB_ADDSTRING, 0, (LPARAM)szComputerName);
@@ -1109,39 +916,41 @@ LoggedOutWindowProc(
 {
     PGINA_CONTEXT pgContext;
 
-    pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
+    pgContext = (PGINA_CONTEXT)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
 
     switch (uMsg)
     {
         case WM_INITDIALOG:
+        {
             /* FIXME: take care of NoDomainUI */
             pgContext = (PGINA_CONTEXT)lParam;
-            SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
+            SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pgContext);
 
-            if (pgContext->bDontDisplayLastUserName == FALSE)
+            if (!pgContext->bDontDisplayLastUserName)
                 SetDlgItemTextW(hwndDlg, IDC_USERNAME, pgContext->UserName);
 
-            if (pgContext->bDisableCAD == TRUE)
+            if (pgContext->bDisableCAD)
                 EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), FALSE);
 
-            if (pgContext->bShutdownWithoutLogon == FALSE)
+            if (!pgContext->bShutdownWithoutLogon)
                 EnableWindow(GetDlgItem(hwndDlg, IDC_SHUTDOWN), FALSE);
 
             SetDomainComboBox(GetDlgItem(hwndDlg, IDC_LOGON_TO), pgContext);
 
             SetFocus(GetDlgItem(hwndDlg, pgContext->bDontDisplayLastUserName ? IDC_USERNAME : IDC_PASSWORD));
 
-            pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+            /* Draw the logo bitmap */
+            pgContext->hBitmap = LoadImageW(pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
             return TRUE;
+        }
 
         case WM_PAINT:
         {
             PAINTSTRUCT ps;
-            HDC hdc;
             if (pgContext->hBitmap)
             {
-                hdc = BeginPaint(hwndDlg, &ps);
-                DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
+                BeginPaint(hwndDlg, &ps);
+                DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
                 EndPaint(hwndDlg, &ps);
             }
             return TRUE;
@@ -1286,7 +1095,7 @@ SetLockMessage(HWND hwnd,
     WCHAR Buffer2[256];
     WCHAR Buffer3[512];
 
-    LoadStringW(pgContext->hDllInstance, IDS_LOCKMSG, Buffer1, 256);
+    LoadStringW(pgContext->hDllInstance, IDS_LOCKMSG, Buffer1, _countof(Buffer1));
 
     wsprintfW(Buffer2, L"%s\\%s", pgContext->Domain, pgContext->UserName);
     wsprintfW(Buffer3, Buffer1, Buffer2);
@@ -1327,8 +1136,8 @@ DoUnlock(
                  wcscmp(Password, pgContext->Password) != 0)
         {
             /* Wrong Password */
-            LoadStringW(pgContext->hDllInstance, IDS_LOCKEDWRONGPASSWORD, Buffer2, 256);
-            LoadStringW(pgContext->hDllInstance, IDS_COMPUTERLOCKED, Buffer1, 256);
+            LoadStringW(pgContext->hDllInstance, IDS_LOCKEDWRONGPASSWORD, Buffer2, _countof(Buffer2));
+            LoadStringW(pgContext->hDllInstance, IDS_COMPUTERLOCKED, Buffer1, _countof(Buffer1));
             MessageBoxW(hwndDlg, Buffer2, Buffer1, MB_OK | MB_ICONERROR);
         }
         else
@@ -1341,9 +1150,9 @@ DoUnlock(
             }
             else
             {
-                LoadStringW(pgContext->hDllInstance, IDS_LOCKEDWRONGUSER, Buffer1, 256);
+                LoadStringW(pgContext->hDllInstance, IDS_LOCKEDWRONGUSER, Buffer1, _countof(Buffer1));
                 wsprintfW(Buffer2, Buffer1, pgContext->Domain, pgContext->UserName);
-                LoadStringW(pgContext->hDllInstance, IDS_COMPUTERLOCKED, Buffer1, 256);
+                LoadStringW(pgContext->hDllInstance, IDS_COMPUTERLOCKED, Buffer1, _countof(Buffer1));
                 MessageBoxW(hwndDlg, Buffer2, Buffer1, MB_OK | MB_ICONERROR);
             }
         }
@@ -1371,33 +1180,35 @@ UnlockWindowProc(
     PGINA_CONTEXT pgContext;
     INT result = WLX_SAS_ACTION_NONE;
 
-    pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
+    pgContext = (PGINA_CONTEXT)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
 
     switch (uMsg)
     {
         case WM_INITDIALOG:
+        {
             pgContext = (PGINA_CONTEXT)lParam;
-            SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
+            SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pgContext);
 
             SetLockMessage(hwndDlg, IDC_LOCKMSG, pgContext);
 
             SetDlgItemTextW(hwndDlg, IDC_USERNAME, pgContext->UserName);
             SetFocus(GetDlgItem(hwndDlg, IDC_PASSWORD));
 
-            if (pgContext->bDisableCAD == TRUE)
+            if (pgContext->bDisableCAD)
                 EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), FALSE);
 
-            pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+            /* Draw the logo bitmap */
+            pgContext->hBitmap = LoadImageW(pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
             return TRUE;
+        }
 
         case WM_PAINT:
         {
             PAINTSTRUCT ps;
-            HDC hdc;
             if (pgContext->hBitmap)
             {
-                hdc = BeginPaint(hwndDlg, &ps);
-                DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
+                BeginPaint(hwndDlg, &ps);
+                DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
                 EndPaint(hwndDlg, &ps);
             }
             return TRUE;
@@ -1461,27 +1272,27 @@ LockedWindowProc(
 {
     PGINA_CONTEXT pgContext;
 
-    pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
+    pgContext = (PGINA_CONTEXT)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
 
     switch (uMsg)
     {
         case WM_INITDIALOG:
         {
             pgContext = (PGINA_CONTEXT)lParam;
-            SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
+            SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pgContext);
 
-            pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+            /* Draw the logo bitmap */
+            pgContext->hBitmap = LoadImageW(pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
             SetLockMessage(hwndDlg, IDC_LOCKMSG, pgContext);
             return TRUE;
         }
         case WM_PAINT:
         {
             PAINTSTRUCT ps;
-            HDC hdc;
             if (pgContext->hBitmap)
             {
-                hdc = BeginPaint(hwndDlg, &ps);
-                DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
+                BeginPaint(hwndDlg, &ps);
+                DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
                 EndPaint(hwndDlg, &ps);
             }
             return TRUE;
index 9dd0201..a082588 100644 (file)
@@ -126,6 +126,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "Добре", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Отказ", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "Добре", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Отказ", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "Помо&щ", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -137,19 +141,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Изключване на РеактОС"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Какво искате да направи компютъра?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
-    DEFPUSHBUTTON "Добре", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Отказ", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "Помо&щ", IDHELP, 204, 122, 55, 14
+    DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
 END
 
 STRINGTABLE
index 65ade5f..effb1c3 100644 (file)
@@ -131,6 +131,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Storno", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Storno", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Nápověda", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -142,19 +146,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Vypnout ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Co má počítač provést?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Storno", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Nápověda", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 5e8755a..cbc9e42 100644 (file)
@@ -126,6 +126,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Abbrechen", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Abbrechen", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Hilfe", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -137,19 +141,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "ReactOS herunterfahren"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Welcher Vorgang soll durchgeführt werden?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Abbrechen", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Hilfe", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index de69b9d..9855afd 100644 (file)
@@ -116,6 +116,7 @@ END
 
 IDD_SHUTDOWN_DLG DIALOGEX 0, 0, 275, 146
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION
+// STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
 CAPTION "Shut Down ReactOS"
 FONT 8, "MS Shell Dlg"
 BEGIN
@@ -126,6 +127,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Cancel", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Cancel", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Help", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -137,19 +142,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Shut Down ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&What do you want the computer to do?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Cancel", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Help", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 18f2b4c..8bc4528 100644 (file)
@@ -127,6 +127,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "Aceptar", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Cancelar", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "Aceptar", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Cancelar", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Ayuda", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -138,19 +142,12 @@ BEGIN
     DEFPUSHBUTTON "Aceptar", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Apagar ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "¿&Qué desea hacer con el equipo?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
-    DEFPUSHBUTTON "Aceptar", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Cancelar", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Ayuda", IDHELP, 204, 122, 55, 14
+    DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
 END
 
 STRINGTABLE
index 19f35fc..fd6d0b6 100644 (file)
@@ -126,6 +126,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Annuler", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Annuler", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Aide", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -137,19 +141,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Fermer ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Que voulez-vous que l'ordinateur fasse ?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Annuler", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Aide", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 1bb11db..16b23f6 100644 (file)
@@ -126,6 +126,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Cancel", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Cancel", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Help", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -137,19 +141,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Shut Down ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&What do you want the computer to do?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Cancel", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Help", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 79b23f9..dcc76d0 100644 (file)
@@ -126,6 +126,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Cancel", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Cancel", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Help", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -137,19 +141,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Shut Down ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&What do you want the computer to do?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Cancel", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Help", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index bec4e15..6243b87 100644 (file)
@@ -135,6 +135,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Annulla", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Annulla", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Aiuto", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -146,19 +150,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Spegnimento di ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Cosa volete che faccia ReactOS?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Annulla", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Aiuto", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 71c79ab..f4b02da 100644 (file)
@@ -126,6 +126,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "キャンセル", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "キャンセル", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "ヘルプ(&H)", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -137,19 +141,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "ReactOSのシャットダウン"
-FONT 9, "MS UI Gothic"
+CAPTION "Luna-XP-style Shut Down dialog"
+FONT 9,"MS UI Gothic", 400, 0, 1
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&コンピュータの動作を選択してください", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "キャンセル", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "ヘルプ(&H)", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 4e230a3..a9969eb 100644 (file)
@@ -126,6 +126,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Avbryt", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Avbryt", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Hjelp", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -137,19 +141,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Slå av ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Hva vil du at datamaskinen skal gjøre?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Avbryt", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Hjelp", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index d56501f..3b037fa 100644 (file)
@@ -136,6 +136,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Anuluj", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Anuluj", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Pomoc", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -147,19 +151,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Zamknij ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Co chcesz, aby zrobił komputer?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Anuluj", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Pomoc", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index aac0441..972a772 100644 (file)
@@ -135,6 +135,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "Con&firmă", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "A&nulează", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "Con&firmă", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "A&nulează", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Manual…", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -146,19 +150,12 @@ BEGIN
     DEFPUSHBUTTON "Î&nchide", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Închidere ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Ce doriți să se întâmple?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
-    DEFPUSHBUTTON "Con&firmă", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "A&nulează", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Manual…", IDHELP, 204, 122, 55, 14
+    DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
 END
 
 STRINGTABLE
index 5a1b14f..841618f 100644 (file)
@@ -128,6 +128,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Отмена", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Отмена", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Справка", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -139,19 +143,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Завершение работы ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Выберите желаемое действие.", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Отмена", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Справка", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 3b9eeac..00ac60b 100644 (file)
@@ -131,6 +131,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Zrušiť", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Zrušiť", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Pomocník", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -142,19 +146,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Vypnutie systému ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Čo chcete aby počítač urobil?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Zrušiť", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Pomocník", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index cc8dc53..026261f 100644 (file)
@@ -129,6 +129,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Anulo", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Anulo", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Ndihmë", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -140,19 +144,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Shut Down ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&What do you want the computer to do?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Anulo", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Ndihmë", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 2ba02e6..54baf64 100644 (file)
@@ -128,6 +128,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "Tamam", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "İptal", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "Tamam", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "İptal", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Yardım", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -139,19 +143,12 @@ BEGIN
     DEFPUSHBUTTON "Tamam", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Oturumu Kapat"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Bilgisayarınızın ne yapmasını istiyorsunuz?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
-    DEFPUSHBUTTON "Tamam", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "İptal", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Yardım", IDHELP, 204, 122, 55, 14
+    DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
 END
 
 STRINGTABLE
index cf041b7..0d57af0 100644 (file)
@@ -134,6 +134,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "Скасувати", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "Скасувати", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "&Довідка", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -145,19 +149,12 @@ BEGIN
     DEFPUSHBUTTON "OK", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "Завершення роботи ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "&Виберіть одну з таких можливостей?", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "Скасувати", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "&Довідка", IDHELP, 204, 122, 55, 14
 END
 
 STRINGTABLE
index 9682991..7113db0 100644 (file)
@@ -128,6 +128,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "确定", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "取消", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "确定", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "取消", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "帮助(&H)", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -139,19 +143,12 @@ BEGIN
     DEFPUSHBUTTON "确定", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "关闭 ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "你想让计算机做什么?(&W)", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
-    DEFPUSHBUTTON "确定", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "取消", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "帮助(&H)", IDHELP, 204, 122, 55, 14
+    DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
 END
 
 STRINGTABLE
index 7ce5f40..120b224 100644 (file)
@@ -128,6 +128,10 @@ BEGIN
     LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
     DEFPUSHBUTTON "確定", IDOK, 143, 122, 55, 14, WS_GROUP
     PUSHBUTTON "取消", IDCANCEL, 204, 122, 55, 14
+
+    // DEFPUSHBUTTON "確定", IDOK, 80, 122, 55, 14, WS_GROUP
+    // PUSHBUTTON "取消", IDCANCEL, 143, 122, 55, 14
+    // PUSHBUTTON "幫助(&H)", IDHELP, 204, 122, 55, 14
 END
 
 IDD_LEGALNOTICE_DLG DIALOGEX 0, 0, 280, 200
@@ -139,19 +143,12 @@ BEGIN
     DEFPUSHBUTTON "確定", IDOK, 115, 179, 50, 14
 END
 
-IDD_SHUTDOWN_SHELL DIALOGEX 0, 0, 275, 146
+IDD_SHUTDOWN_FANCY DIALOGEX 0, 0, 275, 146
 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
-CAPTION "關閉 ReactOS"
+CAPTION "Luna-XP-style Shut Down dialog"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL IDI_ROSLOGO, IDC_ROSLOGO, "Static", SS_BITMAP, 0, 0, 275, 54
-    ICON IDI_SHUTDOWN, IDI_SHUTDOWN, 9, 57, 21, 20, WS_GROUP
-    LTEXT "你想讓計算機做什麼?(&W)", IDC_STATIC, 39, 57, 167, 10
-    COMBOBOX IDC_SHUTDOWN_LIST, 39, 70, 165, 210, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT "", IDC_SHUTDOWN_DESCRIPTION, 39, 93, 187, 27
-    DEFPUSHBUTTON "確定", IDOK, 80, 122, 55, 14, WS_GROUP
-    PUSHBUTTON "取消", IDCANCEL, 143, 122, 55, 14
-    PUSHBUTTON "幫助(&H)", IDHELP, 204, 122, 55, 14
+    DEFPUSHBUTTON "OK", IDOK, 80, 122, 55, 14, WS_GROUP
 END
 
 STRINGTABLE
index eb4e2f9..7c36f40 100644 (file)
 
 #include "msgina.h"
 
-#include <winreg.h>
 #include <winsvc.h>
 #include <userenv.h>
 #include <ndk/sefuncs.h>
-#include <strsafe.h>
 
 HINSTANCE hDllInstance;
 
@@ -228,7 +226,7 @@ GetRegistrySettings(PGINA_CONTEXT pgContext)
             pgContext->bDontDisplayLastUserName = TRUE;
     }
 
-    dwSize = 256 * sizeof(WCHAR);
+    dwSize = sizeof(pgContext->UserName);
     rc = RegQueryValueExW(hKey,
                           L"DefaultUserName",
                           NULL,
@@ -236,7 +234,7 @@ GetRegistrySettings(PGINA_CONTEXT pgContext)
                           (LPBYTE)&pgContext->UserName,
                           &dwSize);
 
-    dwSize = 256 * sizeof(WCHAR);
+    dwSize = sizeof(pgContext->Domain);
     rc = RegQueryValueExW(hKey,
                           L"DefaultDomain",
                           NULL,
@@ -327,7 +325,7 @@ WlxInitialize(
     pgContext->station = lpWinsta;
 
     /* Clear status window handle */
-    pgContext->hStatusWindow = 0;
+    pgContext->hStatusWindow = NULL;
 
     /* Notify winlogon that we will use the default SAS */
     pgContext->pWlxFuncs->WlxUseCtrlAltDel(hWlx);
@@ -371,6 +369,8 @@ WlxScreenSaverNotify(
      *    HKCU\Control Panel\Desktop : ScreenSaverIsSecure
      */
 
+    // FIXME: User impersonation!!
+
     rc = RegOpenKeyExW(HKEY_CURRENT_USER,
                        L"Control Panel\\Desktop",
                        0,
@@ -766,7 +766,7 @@ CreateProfile(
     wcscpy(pgContext->UserName, UserName);
     if (Domain == NULL || wcslen(Domain) == 0)
     {
-        dwLength = 256;
+        dwLength = _countof(pgContext->Domain);
         GetComputerNameW(pgContext->Domain, &dwLength);
     }
     else
@@ -935,9 +935,9 @@ DoAutoLogon(
         }
 
         result = CreateProfile(pgContext, UserName, Domain, Password);
-        if (result == TRUE)
+        if (result)
         {
-            ZeroMemory(pgContext->Password, 256 * sizeof(WCHAR));
+            ZeroMemory(pgContext->Password, sizeof(pgContext->Password));
             wcscpy(pgContext->Password, Password);
 
             NotifyBootConfigStatus(TRUE);
@@ -976,7 +976,7 @@ WlxDisplaySASNotice(
         return;
     }
 
-    if (pgContext->bAutoAdminLogon == TRUE)
+    if (pgContext->bAutoAdminLogon)
     {
         /* Don't display the window, we want to do an automatic logon */
         pgContext->AutoLogonState = AUTOLOGON_ONCE;
@@ -986,7 +986,7 @@ WlxDisplaySASNotice(
     else
         pgContext->AutoLogonState = AUTOLOGON_DISABLED;
 
-    if (pgContext->bDisableCAD == TRUE)
+    if (pgContext->bDisableCAD)
     {
         pgContext->pWlxFuncs->WlxSasNotify(pgContext->hWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
         return;
@@ -1067,7 +1067,7 @@ WlxDisplayLockedNotice(PVOID pWlxContext)
 
     TRACE("WlxDisplayLockedNotice()\n");
 
-    if (pgContext->bDisableCAD == TRUE)
+    if (pgContext->bDisableCAD)
     {
         pgContext->pWlxFuncs->WlxSasNotify(pgContext->hWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
         return;
index e9d1935..44ea5c3 100644 (file)
@@ -6,6 +6,8 @@ extern "C" {
 #endif
 
 #include <stdarg.h>
+#include <stdlib.h>
+#include <tchar.h>
 
 #define WIN32_NO_STATUS
 #define _INC_WINDOWS
@@ -13,11 +15,14 @@ extern "C" {
 
 #include <windef.h>
 #include <winbase.h>
+#include <winreg.h>
 #include <winuser.h>
 #include <winwlx.h>
 #include <ndk/rtlfuncs.h>
 #include <ntsecapi.h>
 
+#include <strsafe.h>
+
 #include <wine/debug.h>
 WINE_DEFAULT_DEBUG_CHANNEL(msgina);
 
@@ -43,7 +48,7 @@ typedef struct
     BOOL bDontDisplayLastUserName;
     BOOL bShutdownWithoutLogon;
 
-    INT nShutdownAction;
+    ULONG nShutdownAction;
 
     /* Information to be filled during logon */
     WCHAR UserName[256];
@@ -129,6 +134,24 @@ CreateProfile(
     IN PWSTR Domain,
     IN PWSTR Password);
 
+/* shutdown.c */
+
+DWORD
+LoadShutdownSelState(VOID);
+
+VOID
+SaveShutdownSelState(DWORD ShutdownCode);
+
+DWORD
+GetAllowedShutdownOptions(VOID);
+
+INT_PTR
+ShutdownDialog(
+    IN HWND hwndDlg,
+    IN DWORD ShutdownOptions,
+    IN PGINA_CONTEXT pgContext);
+
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 1ea7328..61de45d 100644 (file)
@@ -8,7 +8,7 @@
 #define IDD_LOCKED_DLG       104
 #define IDD_UNLOCK_DLG       105
 #define IDD_SHUTDOWN_DLG     108
-#define IDD_SHUTDOWN_SHELL   109
+#define IDD_SHUTDOWN_FANCY   109
 
 #define IDC_LOGOFF               1001
 #define IDC_USERNAME             1002
index 1b1e48a..ea0534f 100644 (file)
@@ -2,29 +2,41 @@
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS msgina.dll
  * FILE:            lib/msgina/shutdown.c
- * PURPOSE:         Shutdown Dialog Box
- * PROGRAMMER:      Lee Schroeder (spaceseel at gmail dot com)
+ * PURPOSE:         Shutdown Dialog Box (GUI only)
+ * PROGRAMMERS:     Lee Schroeder (spaceseel at gmail dot com)
+ *                  Hermes Belusca-Maito (hermes.belusca@sfr.fr)
  */
 
 #include "msgina.h"
 #include <powrprof.h>
-#include <strsafe.h>
 #include <wingdi.h>
-#include <winreg.h>
-#include <stdlib.h>
 
-DWORD g_shutdownCode = 0;
-BOOL g_logoffHideState = FALSE;
+/* Shutdown state flags */
+#define WLX_SHUTDOWN_STATE_LOGOFF       0x01
+#define WLX_SHUTDOWN_STATE_POWER_OFF    0x02
+#define WLX_SHUTDOWN_STATE_REBOOT       0x04
+// 0x08
+#define WLX_SHUTDOWN_STATE_SLEEP        0x10
+// 0x20
+#define WLX_SHUTDOWN_STATE_HIBERNATE    0x40
+// 0x80
+
+typedef struct _SHUTDOWN_DLG_CONTEXT
+{
+    PGINA_CONTEXT pgContext;
+    DWORD ShutdownOptions;
+    BOOL bCloseDlg;
+} SHUTDOWN_DLG_CONTEXT, *PSHUTDOWN_DLG_CONTEXT;
 
-static DWORD
+DWORD
 LoadShutdownSelState(VOID)
 {
-    HKEY hKey;
     LONG lRet;
+    HKEY hKey;
     DWORD dwValue, dwTemp, dwSize;
 
     /* Default to shutdown */
-    dwValue = 1;
+    dwValue = WLX_SAS_ACTION_SHUTDOWN_POWER_OFF;
 
     lRet = RegOpenKeyExW(HKEY_CURRENT_USER,
                          L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer",
@@ -43,33 +55,40 @@ LoadShutdownSelState(VOID)
     {
         switch (dwTemp)
         {
-            case 0x01: /* Log off */
-                dwValue = 0;
+            case WLX_SHUTDOWN_STATE_LOGOFF:
+                dwValue = WLX_SAS_ACTION_LOGOFF;
                 break;
 
-            case 0x02: /* Shut down */
-                dwValue = 1;
+            case WLX_SHUTDOWN_STATE_POWER_OFF:
+                dwValue = WLX_SAS_ACTION_SHUTDOWN_POWER_OFF;
                 break;
 
-            case 0x04: /* Reboot */
-                dwValue = 2;
+            case WLX_SHUTDOWN_STATE_REBOOT:
+                dwValue = WLX_SAS_ACTION_SHUTDOWN_REBOOT;
                 break;
 
-            case 0x10: /* Sleep */
-                dwValue = 3;
+            // 0x08
+
+            case WLX_SHUTDOWN_STATE_SLEEP:
+                dwValue = WLX_SAS_ACTION_SHUTDOWN_SLEEP;
                 break;
 
-            case 0x40: /* Hibernate */
-                dwValue = 4;
+            // 0x20
+
+            case WLX_SHUTDOWN_STATE_HIBERNATE:
+                dwValue = WLX_SAS_ACTION_SHUTDOWN_HIBERNATE;
                 break;
+
+            // 0x80
         }
     }
 
     return dwValue;
 }
 
-static VOID
-SaveShutdownSelState(DWORD ShutdownCode)
+VOID
+SaveShutdownSelState(
+    IN DWORD ShutdownCode)
 {
     HKEY hKey;
     DWORD dwValue = 0;
@@ -86,24 +105,24 @@ SaveShutdownSelState(DWORD ShutdownCode)
 
     switch (ShutdownCode)
     {
-        case 0: /* Log off */
-            dwValue = 0x01;
+        case WLX_SAS_ACTION_LOGOFF:
+            dwValue = WLX_SHUTDOWN_STATE_LOGOFF;
             break;
 
-        case 1: /* Shut down */
-            dwValue = 0x02;
+        case WLX_SAS_ACTION_SHUTDOWN_POWER_OFF:
+            dwValue = WLX_SHUTDOWN_STATE_POWER_OFF;
             break;
 
-        case 2: /* Reboot */
-            dwValue = 0x04;
+        case WLX_SAS_ACTION_SHUTDOWN_REBOOT:
+            dwValue = WLX_SHUTDOWN_STATE_REBOOT;
             break;
 
-        case 3: /* Sleep */
-            dwValue = 0x10;
+        case WLX_SAS_ACTION_SHUTDOWN_SLEEP:
+            dwValue = WLX_SHUTDOWN_STATE_SLEEP;
             break;
 
-        case 4: /* Hibernate */
-            dwValue = 0x40;
+        case WLX_SAS_ACTION_SHUTDOWN_HIBERNATE:
+            dwValue = WLX_SHUTDOWN_STATE_HIBERNATE;
             break;
     }
 
@@ -114,232 +133,255 @@ SaveShutdownSelState(DWORD ShutdownCode)
     RegCloseKey(hKey);
 }
 
+DWORD
+GetAllowedShutdownOptions(VOID)
+{
+    DWORD Options = 0;
+
+    // FIXME: Compute those options accordings to current user's rights!
+    Options |= WLX_SHUTDOWN_STATE_LOGOFF | WLX_SHUTDOWN_STATE_POWER_OFF | WLX_SHUTDOWN_STATE_REBOOT;
+
+    if (IsPwrSuspendAllowed())
+        Options |= WLX_SHUTDOWN_STATE_SLEEP;
+
+    if (IsPwrHibernateAllowed())
+        Options |= WLX_SHUTDOWN_STATE_HIBERNATE;
+
+    return Options;
+}
+
 static VOID
-UpdateShutdownShellDesc(HWND hWnd)
+UpdateShutdownDesc(
+    IN HWND hDlg,
+    IN PSHUTDOWN_DLG_CONTEXT pContext) // HINSTANCE hInstance
 {
     UINT DescId = 0;
-    DWORD ShutdownCode = 0;
-    WCHAR tmpBuffer[256];
+    DWORD ShutdownCode;
+    WCHAR szBuffer[256];
 
-    ShutdownCode = SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_GETCURSEL, 0, 0);
+    ShutdownCode = SendDlgItemMessageW(hDlg, IDC_SHUTDOWN_LIST, CB_GETCURSEL, 0, 0);
+    if (ShutdownCode == CB_ERR) // Invalid selection
+        return;
+
+    ShutdownCode = SendDlgItemMessageW(hDlg, IDC_SHUTDOWN_LIST, CB_GETITEMDATA, ShutdownCode, 0);
 
-    if (!g_logoffHideState)
+    switch (ShutdownCode)
     {
-        switch (ShutdownCode)
-        {
-        case 0: /* Log off */
+        case WLX_SAS_ACTION_LOGOFF:
             DescId = IDS_SHUTDOWN_LOGOFF_DESC;
             break;
-        case 1: /* Shut down */
+
+        case WLX_SAS_ACTION_SHUTDOWN_POWER_OFF:
             DescId = IDS_SHUTDOWN_SHUTDOWN_DESC;
             break;
-        case 2: /* Restart */
+
+        case WLX_SAS_ACTION_SHUTDOWN_REBOOT:
             DescId = IDS_SHUTDOWN_RESTART_DESC;
             break;
-        default:
-            break;
-        }
 
-        if (IsPwrSuspendAllowed())
-        {
-            if (ShutdownCode == 3) /* Sleep */
-            {
-                DescId = IDS_SHUTDOWN_SLEEP_DESC;
-            }
-            else if (ShutdownCode == 4) /* Hibernate */
-            {
-                DescId = IDS_SHUTDOWN_HIBERNATE_DESC;
-            }
-        }
-        else
-        {
-            if (ShutdownCode == 3) /* Hibernate */
-            {
-                DescId = IDS_SHUTDOWN_SLEEP_DESC;
-            }
-        }
-    }
-    else
-    {
-        switch (ShutdownCode)
-        {
-        case 0: /* Shut down */
-            DescId = IDS_SHUTDOWN_SHUTDOWN_DESC;
+        case WLX_SAS_ACTION_SHUTDOWN_SLEEP:
+            DescId = IDS_SHUTDOWN_SLEEP_DESC;
             break;
-        case 1: /* Restart */
-            DescId = IDS_SHUTDOWN_RESTART_DESC;
+
+        case WLX_SAS_ACTION_SHUTDOWN_HIBERNATE:
+            DescId = IDS_SHUTDOWN_HIBERNATE_DESC;
             break;
+
         default:
             break;
-        }
-
-        if (IsPwrSuspendAllowed())
-        {
-            if (ShutdownCode == 2) /* Sleep */
-            {
-                DescId = IDS_SHUTDOWN_SLEEP_DESC;
-            }
-            else if (ShutdownCode == 3) /* Hibernate */
-            {
-                DescId = IDS_SHUTDOWN_HIBERNATE_DESC;
-            }
-        }
-        else
-        {
-            if (ShutdownCode == 2) /* Hibernate */
-            {
-                DescId = IDS_SHUTDOWN_SLEEP_DESC;
-            }
-        }
     }
 
-    LoadStringW(hDllInstance, DescId, tmpBuffer, _countof(tmpBuffer));
-    SetDlgItemTextW(hWnd, IDC_SHUTDOWN_DESCRIPTION, tmpBuffer);
+    LoadStringW(pContext->pgContext->hDllInstance, DescId, szBuffer, _countof(szBuffer));
+    SetDlgItemTextW(hDlg, IDC_SHUTDOWN_DESCRIPTION, szBuffer);
 }
 
-BOOL CALLBACK
-ExitWindowsDialogShellProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+static VOID
+ShutdownOnInit(
+    IN HWND hDlg,
+    IN PSHUTDOWN_DLG_CONTEXT pContext)
 {
-    PGINA_CONTEXT pgContext;
+    PGINA_CONTEXT pgContext = pContext->pgContext;
+    HWND hwndList;
+    INT idx, count, i;
+    WCHAR szBuffer[256];
+    WCHAR szBuffer2[256];
 
-    pgContext = (PGINA_CONTEXT)GetWindowLongPtrW(hWnd, GWLP_USERDATA);
+    hwndList = GetDlgItem(hDlg, IDC_SHUTDOWN_LIST);
 
-    switch (uMsg)
+    /* Clear the content before it's used */
+    SendMessageW(hwndList, CB_RESETCONTENT, 0, 0);
+
+    /* Log off */
+    if (pContext->ShutdownOptions & WLX_SHUTDOWN_STATE_LOGOFF)
     {
-        case WM_INITDIALOG:
-        {
-            int defSelect = 0;
-            int tmpSelect, lastState;
-            WCHAR userBuffer[256];
-            DWORD userBufferSize = _countof(userBuffer);
-            WCHAR tmpBuffer[256];
-            WCHAR tmpBuffer2[512];
-
-            pgContext = (PGINA_CONTEXT)lParam;
-            if (!pgContext)
-            {
-                WARN("pgContext is NULL, branding bitmaps will not be displayed.\n");
-            }
+        LoadStringW(pgContext->hDllInstance, IDS_SHUTDOWN_LOGOFF, szBuffer, _countof(szBuffer));
+        StringCchPrintfW(szBuffer2, _countof(szBuffer2), szBuffer, pgContext->UserName);
+        idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer2);
+        if (idx != CB_ERR)
+            SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_LOGOFF);
+    }
 
-            SetWindowLongPtrW(hWnd, GWLP_USERDATA, (LONG_PTR)pgContext);
+    /* Shut down - DEFAULT */
+    if (pContext->ShutdownOptions & WLX_SHUTDOWN_STATE_POWER_OFF)
+    {
+        LoadStringW(pgContext->hDllInstance, IDS_SHUTDOWN_SHUTDOWN, szBuffer, _countof(szBuffer));
+        idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer);
+        if (idx != CB_ERR)
+            SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
+    }
 
-            /* Clear the content before it's used */
-            SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_RESETCONTENT, 0, 0);
+    /* Restart */
+    if (pContext->ShutdownOptions & WLX_SHUTDOWN_STATE_REBOOT)
+    {
+        LoadStringW(pgContext->hDllInstance, IDS_SHUTDOWN_RESTART, szBuffer, _countof(szBuffer));
+        idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer);
+        if (idx != CB_ERR)
+            SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_SHUTDOWN_REBOOT);
+    }
 
-            lastState = LoadShutdownSelState();
+    // if (pContext->ShutdownOptions & 0x08) {}
 
-            if (!g_logoffHideState)
-            {
-                /* Log off */
-                LoadStringW(hDllInstance, IDS_SHUTDOWN_LOGOFF, tmpBuffer, _countof(tmpBuffer));
-                GetUserNameW(userBuffer, &userBufferSize);
-                StringCchPrintfW(tmpBuffer2, _countof(tmpBuffer2), tmpBuffer, userBuffer);
-                tmpSelect = SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_ADDSTRING, 0, (LPARAM)tmpBuffer2);
-                if (lastState == 0)
-                {
-                    defSelect = tmpSelect;
-                }
-            }
+    /* Sleep */
+    if (pContext->ShutdownOptions & WLX_SHUTDOWN_STATE_SLEEP)
+    {
+        LoadStringW(pgContext->hDllInstance, IDS_SHUTDOWN_SLEEP, szBuffer, _countof(szBuffer));
+        idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer);
+        if (idx != CB_ERR)
+            SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_SHUTDOWN_SLEEP);
+    }
 
-            /* Shut down - DEFAULT */
-            LoadStringW(hDllInstance, IDS_SHUTDOWN_SHUTDOWN, tmpBuffer, _countof(tmpBuffer));
-            tmpSelect = SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_ADDSTRING, 0, (LPARAM)tmpBuffer);
-            if (lastState == 1)
-            {
-                defSelect = tmpSelect;
-            }
+    // if (pContext->ShutdownOptions & 0x20) {}
 
-            /* Restart */
-            LoadStringW(hDllInstance, IDS_SHUTDOWN_RESTART, tmpBuffer, _countof(tmpBuffer));
-            tmpSelect = SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_ADDSTRING, 0, (LPARAM)tmpBuffer);
-            if (lastState == 2)
-            {
-                defSelect = tmpSelect;
-            }
+    /* Hibernate */
+    if (pContext->ShutdownOptions & WLX_SHUTDOWN_STATE_HIBERNATE)
+    {
+        LoadStringW(pgContext->hDllInstance, IDS_SHUTDOWN_HIBERNATE, szBuffer, _countof(szBuffer));
+        idx = SendMessageW(hwndList, CB_ADDSTRING, 0, (LPARAM)szBuffer);
+        if (idx != CB_ERR)
+            SendMessageW(hwndList, CB_SETITEMDATA, idx, WLX_SAS_ACTION_SHUTDOWN_HIBERNATE);
+    }
 
-            /* Sleep */
-            if (IsPwrSuspendAllowed())
-            {
-                LoadStringW(hDllInstance, IDS_SHUTDOWN_SLEEP, tmpBuffer, _countof(tmpBuffer));
-                tmpSelect = SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_ADDSTRING, 0, (LPARAM)tmpBuffer);
-                if (lastState == 3)
-                {
-                    defSelect = tmpSelect;
-                }
-            }
+    // if (pContext->ShutdownOptions & 0x80) {}
 
-            /* Hibernate */
-            if (IsPwrHibernateAllowed())
-            {
-                LoadStringW(hDllInstance, IDS_SHUTDOWN_HIBERNATE, tmpBuffer, _countof(tmpBuffer));
-                tmpSelect = SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_ADDSTRING, 0, (LPARAM)tmpBuffer);
-                if (lastState == 4)
-                {
-                    defSelect = tmpSelect;
-                }
-            }
+    /* Set the default shut down selection */
+    count = SendMessageW(hwndList, CB_GETCOUNT, 0, 0);
+    for (i = 0; i < count; i++)
+    {
+        if (SendMessageW(hwndList, CB_GETITEMDATA, i, 0) == pgContext->nShutdownAction)
+        {
+            SendMessageW(hwndList, CB_SETCURSEL, i, 0);
+            break;
+        }
+    }
+
+    /* Update the choice description based on the current selection */
+    UpdateShutdownDesc(hDlg, pContext);
+}
+
+static VOID
+ShutdownOnOk(
+    IN HWND hDlg,
+    IN PGINA_CONTEXT pgContext)
+{
+    INT idx;
+
+    idx = SendDlgItemMessageW(hDlg,
+                              IDC_SHUTDOWN_LIST,
+                              CB_GETCURSEL,
+                              0,
+                              0);
+    if (idx != CB_ERR)
+    {
+        pgContext->nShutdownAction =
+            SendDlgItemMessageW(hDlg,
+                                IDC_SHUTDOWN_LIST,
+                                CB_GETITEMDATA,
+                                idx,
+                                0);
+    }
+}
 
-            /* Sets the default shut down selection */
-            SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_SETCURSEL, defSelect, 0);
+static BOOL
+CALLBACK
+ShutdownDialogProc(
+    HWND hDlg,
+    UINT uMsg,
+    WPARAM wParam,
+    LPARAM lParam)
+{
+    PSHUTDOWN_DLG_CONTEXT pContext;
 
-            /* Updates the choice description based on the current selection */
-            UpdateShutdownShellDesc(hWnd);
+    pContext = (PSHUTDOWN_DLG_CONTEXT)GetWindowLongPtrW(hDlg, GWLP_USERDATA);
 
-            /* Draw the logo bitmap */
-            if (pgContext)
-                pgContext->hBitmap = LoadImageW(hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+    switch (uMsg)
+    {
+        case WM_INITDIALOG:
+        {
+            pContext = (PSHUTDOWN_DLG_CONTEXT)lParam;
+            SetWindowLongPtrW(hDlg, GWLP_USERDATA, (LONG_PTR)pContext);
+
+            ShutdownOnInit(hDlg, pContext);
 
+            /* Draw the logo bitmap */
+            pContext->pgContext->hBitmap =
+                LoadImageW(pContext->pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
             return TRUE;
         }
 
         case WM_DESTROY:
-        {
-            if (pgContext)
-                DeleteObject(pgContext->hBitmap);
+            DeleteObject(pContext->pgContext->hBitmap);
             return TRUE;
-        }
 
-#if 0
         case WM_ACTIVATE:
         {
+            /*
+             * If the user deactivates the shutdown dialog (it loses its focus
+             * while the dialog is not being closed), then destroy the dialog
+             * and cancel shutdown.
+             */
             if (LOWORD(wParam) == WA_INACTIVE)
-                EndDialog(hWnd, 0);
+            {
+                if (!pContext->bCloseDlg)
+                {
+                    pContext->bCloseDlg = TRUE;
+                    EndDialog(hDlg, 0);
+                }
+            }
             return FALSE;
         }
-#endif
 
         case WM_PAINT:
         {
             PAINTSTRUCT ps;
-            if (pgContext && pgContext->hBitmap)
+            if (pContext->pgContext->hBitmap)
             {
-                BeginPaint(hWnd, &ps);
-                DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, 0, 0, 0, 0, 0, DST_BITMAP);
-                EndPaint(hWnd, &ps);
-                return TRUE;
+                BeginPaint(hDlg, &ps);
+                DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pContext->pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
+                EndPaint(hDlg, &ps);
             }
-            return FALSE;
+            return TRUE;
         }
 
+        case WM_CLOSE:
+            pContext->bCloseDlg = TRUE;
+            EndDialog(hDlg, IDCANCEL);
+            break;
+
         case WM_COMMAND:
             switch (LOWORD(wParam))
             {
                 case IDOK:
-                    g_shutdownCode = SendDlgItemMessageW(hWnd, IDC_SHUTDOWN_LIST, CB_GETCURSEL, 0, 0);
-                    SaveShutdownSelState(g_shutdownCode);
-                    EndDialog(hWnd, IDOK);
-                    break;
+                    ShutdownOnOk(hDlg, pContext->pgContext);
 
+                /* Fall back */
                 case IDCANCEL:
-                    EndDialog(hWnd, IDCANCEL);
-                    break;
-
                 case IDHELP:
-                    EndDialog(hWnd, IDHELP);
+                    pContext->bCloseDlg = TRUE;
+                    EndDialog(hDlg, LOWORD(wParam));
                     break;
 
                 case IDC_SHUTDOWN_LIST:
-                    UpdateShutdownShellDesc(hWnd);
+                    UpdateShutdownDesc(hDlg, pContext);
                     break;
             }
             break;
@@ -350,6 +392,55 @@ ExitWindowsDialogShellProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
     return TRUE;
 }
 
+INT_PTR
+ShutdownDialog(
+    IN HWND hwndDlg,
+    IN DWORD ShutdownOptions,
+    IN PGINA_CONTEXT pgContext)
+{
+    INT_PTR ret;
+    SHUTDOWN_DLG_CONTEXT Context;
+
+#if 0
+    DWORD ShutdownOptions;
+
+    // FIXME: User impersonation!!
+    pgContext->nShutdownAction = LoadShutdownSelState();
+    ShutdownOptions = GetAllowedShutdownOptions();
+#endif
+
+    Context.pgContext = pgContext;
+    Context.ShutdownOptions = ShutdownOptions;
+    Context.bCloseDlg = FALSE;
+
+    if (pgContext->hWlx && pgContext->pWlxFuncs)
+    {
+        ret = pgContext->pWlxFuncs->WlxDialogBoxParam(pgContext->hWlx,
+                                                      pgContext->hDllInstance,
+                                                      MAKEINTRESOURCEW(IDD_SHUTDOWN_DLG),
+                                                      hwndDlg,
+                                                      ShutdownDialogProc,
+                                                      (LPARAM)&Context);
+    }
+    else
+    {
+        ret = DialogBoxParamW(pgContext->hDllInstance,
+                              MAKEINTRESOURCEW(IDD_SHUTDOWN_DLG),
+                              hwndDlg,
+                              ShutdownDialogProc,
+                              (LPARAM)&Context);
+    }
+
+#if 0
+    // FIXME: User impersonation!!
+    if (ret == IDOK)
+        SaveShutdownSelState(pgContext->nShutdownAction);
+#endif
+
+    return ret;
+}
+
+
 /*
  * NOTES:
  * - Based upon observations on the ShellShutdownDialog() function, the function doesn't actually
@@ -373,35 +464,62 @@ ShellShutdownDialog(
     LPWSTR lpUsername,
     BOOL   bHideLogoff)
 {
-    GINA_CONTEXT pgContext = { 0 };
-    INT_PTR dlgValue = 0;
+    INT_PTR dlgValue;
+    DWORD ShutdownOptions;
+
+    /*
+     * As we are called by the shell itself, don't use
+     * the cached GINA context but use a local copy here.
+     */
+    GINA_CONTEXT gContext = { 0 };
+    DWORD BufferSize;
 
     UNREFERENCED_PARAMETER(lpUsername);
 
-    g_logoffHideState = bHideLogoff;
+    ShutdownOptions = GetAllowedShutdownOptions();
+    if (bHideLogoff)
+        ShutdownOptions &= ~WLX_SHUTDOWN_STATE_LOGOFF;
 
-    /* Load the shut down dialog box */
-    dlgValue = DialogBoxParamW(hDllInstance,
-                               MAKEINTRESOURCEW(IDD_SHUTDOWN_SHELL),
-                               hParent,
-                               ExitWindowsDialogShellProc,
-                               (LPARAM)&pgContext);
+    /* Initialize our local GINA context */
+    gContext.hDllInstance = hDllInstance;
+    BufferSize = _countof(gContext.UserName);
+    // NOTE: Only when this function is called, Win checks inside
+    // HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer",
+    // value "Logon User Name", and determines whether it will display
+    // the user name.
+    GetUserNameW(gContext.UserName, &BufferSize);
+    gContext.nShutdownAction = LoadShutdownSelState();
+
+    /* Load the shutdown dialog box */
+    dlgValue = ShutdownDialog(hParent, ShutdownOptions, &gContext);
 
     /* Determine what to do based on user selection */
     if (dlgValue == IDOK)
     {
-        switch (g_shutdownCode)
+        SaveShutdownSelState(gContext.nShutdownAction);
+
+        switch (gContext.nShutdownAction)
         {
-        case 0: /* Log off */
-            return 0x01;
-        case 1: /* Shut down */
-            return 0x02;
-        case 2: /* Reboot */
-            return 0x04;
-        case 3: /* Sleep */
-            return 0x10;
-        case 4: /* Hibernate */
-            return 0x40;
+            case WLX_SAS_ACTION_LOGOFF:
+                return WLX_SHUTDOWN_STATE_LOGOFF;
+
+            case WLX_SAS_ACTION_SHUTDOWN_POWER_OFF:
+                return WLX_SHUTDOWN_STATE_POWER_OFF;
+
+            case WLX_SAS_ACTION_SHUTDOWN_REBOOT:
+                return WLX_SHUTDOWN_STATE_REBOOT;
+
+            // 0x08
+
+            case WLX_SAS_ACTION_SHUTDOWN_SLEEP:
+                return WLX_SHUTDOWN_STATE_SLEEP;
+
+            // 0x20
+
+            case WLX_SAS_ACTION_SHUTDOWN_HIBERNATE:
+                return WLX_SHUTDOWN_STATE_HIBERNATE;
+
+            // 0x80
         }
     }
     /* Help file is called directly here */
@@ -415,5 +533,5 @@ ShellShutdownDialog(
         ERR("Failed to create dialog\n");
     }
 
-    return 0x00;
+    return 0;
 }
index e01d330..286fd6e 100644 (file)
@@ -70,7 +70,7 @@ DisplayResourceText(
     static LPCWSTR newLine = L"\n";
     DWORD count;
 
-    if (0 == LoadStringW(hDllInstance, uIdResourceText, Prompt, 256))
+    if (0 == LoadStringW(hDllInstance, uIdResourceText, Prompt, _countof(Prompt)))
         return FALSE;
     if (!WriteConsoleW(
         GetStdHandle(STD_OUTPUT_HANDLE),
@@ -205,9 +205,9 @@ TUILoggedOutSAS(
     TRACE("TUILoggedOutSAS()\n");
 
     /* Ask the user for credentials */
-    if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
+    if (!ReadString(IDS_ASKFORUSER, UserName, _countof(UserName), TRUE))
         return WLX_SAS_ACTION_NONE;
-    if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
+    if (!ReadString(IDS_ASKFORPASSWORD, Password, _countof(Password), FALSE))
         return WLX_SAS_ACTION_NONE;
 
     Status = DoLoginTasks(pgContext, UserName, NULL, Password, &SubStatus);
@@ -238,9 +238,9 @@ TUILockedSAS(
         return WLX_SAS_ACTION_UNLOCK_WKSTA;
 
     /* Ask the user for credentials */
-    if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
+    if (!ReadString(IDS_ASKFORUSER, UserName, _countof(UserName), TRUE))
         return WLX_SAS_ACTION_NONE;
-    if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
+    if (!ReadString(IDS_ASKFORPASSWORD, Password, _countof(Password), FALSE))
         return WLX_SAS_ACTION_NONE;
 
     Status = ConnectToLsa(pgContext);