[SERVMAN]
authorEric Kohl <eric.kohl@reactos.org>
Mon, 18 Jul 2016 21:49:19 +0000 (21:49 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Mon, 18 Jul 2016 21:49:19 +0000 (21:49 +0000)
Service logon property page:
- Fix initialization and display bugs.
- Start work on the 'Apply' function. It doe not apply changes yet.
- Add password check messages.

svn path=/trunk/; revision=71965

28 files changed:
reactos/base/applications/mscutils/servman/lang/bg-BG.rc
reactos/base/applications/mscutils/servman/lang/cs-CZ.rc
reactos/base/applications/mscutils/servman/lang/de-DE.rc
reactos/base/applications/mscutils/servman/lang/el-GR.rc
reactos/base/applications/mscutils/servman/lang/en-US.rc
reactos/base/applications/mscutils/servman/lang/es-ES.rc
reactos/base/applications/mscutils/servman/lang/fr-FR.rc
reactos/base/applications/mscutils/servman/lang/he-IL.rc
reactos/base/applications/mscutils/servman/lang/id-ID.rc
reactos/base/applications/mscutils/servman/lang/it-IT.rc
reactos/base/applications/mscutils/servman/lang/ja-JP.rc
reactos/base/applications/mscutils/servman/lang/ko-KR.rc
reactos/base/applications/mscutils/servman/lang/no-NO.rc
reactos/base/applications/mscutils/servman/lang/pl-PL.rc
reactos/base/applications/mscutils/servman/lang/ro-RO.rc
reactos/base/applications/mscutils/servman/lang/ru-RU.rc
reactos/base/applications/mscutils/servman/lang/sk-SK.rc
reactos/base/applications/mscutils/servman/lang/sq-AL.rc
reactos/base/applications/mscutils/servman/lang/sv-SE.rc
reactos/base/applications/mscutils/servman/lang/th-TH.rc
reactos/base/applications/mscutils/servman/lang/tr-TR.rc
reactos/base/applications/mscutils/servman/lang/uk-UA.rc
reactos/base/applications/mscutils/servman/lang/zh-CN.rc
reactos/base/applications/mscutils/servman/lang/zh-TW.rc
reactos/base/applications/mscutils/servman/misc.c
reactos/base/applications/mscutils/servman/precomp.h
reactos/base/applications/mscutils/servman/propsheet_logon.c
reactos/base/applications/mscutils/servman/resource.h

index b92eab8..112f093 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index ca67657..9b56fc8 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 9910f9d..a3819c6 100644 (file)
@@ -331,8 +331,14 @@ END
 
 STRINGTABLE
 BEGIN
-    IDS_NO_ACTION "Take no action"
-    IDS_RESTART_SERVICE "Restart the Service"
-    IDS_RUN_PROGRAM "Run a Program"
-    IDS_RESTART_COMPUTER "Restart the Computer"
+    IDS_NO_ACTION "Keine Aktion durchführen"
+    IDS_RESTART_SERVICE "Dienst neu starten"
+    IDS_RUN_PROGRAM "Ein Programm ausführen"
+    IDS_RESTART_COMPUTER "Computer neu starten"
+END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "Die Kennwörter stimmen nicht überein!"
+    IDS_INVALID_PASSWORD "Geben Sie ein gültiges Kennwort ein!"
 END
index eedf64f..4e700e9 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 09514a3..d921ca0 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 2628d28..5a964aa 100644 (file)
@@ -339,3 +339,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 703ea97..ad22a6c 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index dfbc64e..2d6f421 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 27f3f6f..0407f5b 100644 (file)
@@ -336,3 +336,10 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
+
index 94512e2..31485e6 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index dc6b084..36affab 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 8be1a25..7d22980 100644 (file)
@@ -338,3 +338,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 82ddf96..707c215 100644 (file)
@@ -336,3 +336,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 213ff0c..4fc0a0c 100644 (file)
@@ -346,3 +346,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index af47aaa..4faee64 100644 (file)
@@ -341,3 +341,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index c1ea2c6..f44bd77 100644 (file)
@@ -336,3 +336,10 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
+
index 114b116..cbdfa10 100644 (file)
@@ -341,3 +341,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 9212c54..261f292 100644 (file)
@@ -341,3 +341,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 40ac7a0..c0de6d6 100644 (file)
@@ -343,3 +343,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 215fce9..9547045 100644 (file)
@@ -344,3 +344,10 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
+
index e0e5fd2..4869c4d 100644 (file)
@@ -338,3 +338,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 7d24dee..30bc170 100644 (file)
@@ -344,3 +344,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 10c2b88..2bd3e01 100644 (file)
@@ -338,3 +338,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index 93aca0d..f19398d 100644 (file)
@@ -338,3 +338,9 @@ BEGIN
     IDS_RUN_PROGRAM "Run a Program"
     IDS_RESTART_COMPUTER "Restart the Computer"
 END
+
+STRINGTABLE
+BEGIN
+    IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
+    IDS_INVALID_PASSWORD "Enter a valid Password!"
+END
index b3d22ef..3cd5201 100644 (file)
@@ -275,3 +275,24 @@ InitImageList(UINT StartResource,
 
     return himl;
 }
+
+
+#define BUFFERSIZE 512
+
+VOID
+ResourceMessageBox(
+    HINSTANCE hInstance,
+    HWND hwnd,
+    UINT uType,
+    UINT uCaptionId,
+    UINT uMessageId)
+{
+    WCHAR szErrorText[BUFFERSIZE];
+    WCHAR szErrorCaption[BUFFERSIZE];
+
+    LoadStringW(hInstance, uMessageId, szErrorText, sizeof(szErrorText) / sizeof(WCHAR));
+    LoadStringW(hInstance, uCaptionId, szErrorCaption, sizeof(szErrorCaption) / sizeof(WCHAR));
+
+    MessageBoxW(hwnd, szErrorText, szErrorCaption, uType);
+}
+
index 8923e0d..af527f3 100644 (file)
@@ -210,5 +210,12 @@ HIMAGELIST InitImageList(UINT StartResource,
                          UINT Width,
                          UINT Height,
                          ULONG type);
+VOID
+ResourceMessageBox(
+    HINSTANCE hInstance,
+    HWND hwnd,
+    UINT uType,
+    UINT uCaptionId,
+    UINT uMessageId);
 
 #endif /* __SERVMAN_PRECOMP_H */
index edfc26d..e869451 100644 (file)
@@ -11,6 +11,8 @@
 #define NDEBUG
 #include <debug.h>
 
+#define DEFAULT_PASSWORD L"               "
+
 typedef struct _LOGONDATA
 {
     ENUM_SERVICE_STATUS_PROCESS *pService;
@@ -18,10 +20,12 @@ typedef struct _LOGONDATA
     WCHAR szAccountName[64];
     WCHAR szPassword1[64];
     WCHAR szPassword2[64];
-    BOOL bInitial;
-    BOOL bAccountNameChanged;
+    BOOL bInitialized;
+    BOOL bLocalSystem;
+    BOOL bAccountChanged;
 } LOGONDATA, *PLOGONDATA;
 
+
 static
 VOID
 SetControlStates(
@@ -29,28 +33,166 @@ SetControlStates(
     PLOGONDATA pLogonData,
     BOOL bLocalSystem)
 {
-    BOOL y = bLocalSystem ? FALSE : TRUE;
-
     EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_INTERACTIVE), bLocalSystem);
-    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_ACCOUNTNAME), y);
-    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_SEARCH), y);
-    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_PW1TEXT), y);
-    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_PASSWORD1), y);
-    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_PW2TEXT), y);
-    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_PASSWORD2), y);
-
-    if (bLocalSystem == TRUE && pLogonData->bInitial == FALSE)
+    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_ACCOUNTNAME), !bLocalSystem);
+    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_SEARCH), FALSE /*!bLocalSystem*/);
+    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_PW1TEXT), !bLocalSystem);
+    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_PASSWORD1), !bLocalSystem);
+    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_PW2TEXT), !bLocalSystem);
+    EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_PASSWORD2), !bLocalSystem);
+
+    if (bLocalSystem)
     {
-        GetDlgItemText(hwndDlg, IDC_LOGON_ACCOUNTNAME, pLogonData->szAccountName, 64);
-        GetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD1, pLogonData->szPassword1, 64);
-        GetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD2, pLogonData->szPassword2, 64);
+        if (pLogonData->bInitialized == TRUE)
+        {
+            GetDlgItemText(hwndDlg, IDC_LOGON_ACCOUNTNAME, pLogonData->szAccountName, 64);
+            GetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD1, pLogonData->szPassword1, 64);
+            GetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD2, pLogonData->szPassword2, 64);
+        }
+
+        SetDlgItemText(hwndDlg, IDC_LOGON_ACCOUNTNAME, L"");
+        SetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD1, L"");
+        SetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD2, L"");
     }
+    else
+    {
+        SetDlgItemText(hwndDlg, IDC_LOGON_ACCOUNTNAME, pLogonData->szAccountName);
+        SetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD1, pLogonData->szPassword1);
+        SetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD2, pLogonData->szPassword2);
+    }
+
+    pLogonData->bLocalSystem = bLocalSystem;
+}
 
-    SetDlgItemText(hwndDlg, IDC_LOGON_ACCOUNTNAME, bLocalSystem ? L"" : pLogonData->szAccountName);
-    SetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD1, bLocalSystem ? L"" : pLogonData->szPassword1);
-    SetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD2, bLocalSystem ? L"" : pLogonData->szPassword2);
 
-    pLogonData->bInitial = FALSE;
+#if 0
+BOOL
+SetServiceAccount(
+    LPWSTR lpServiceName,
+    LPWSTR lpStartName,
+    LPWSTR lpPassword)
+{
+    SC_HANDLE hSCManager;
+    SC_HANDLE hSc;
+    SC_LOCK scLock;
+    BOOL bRet = FALSE;
+
+    hSCManager = OpenSCManagerW(NULL,
+                                NULL,
+                                SC_MANAGER_LOCK);
+    if (hSCManager)
+    {
+        scLock = LockServiceDatabase(hSCManager);
+        if (scLock)
+        {
+            hSc = OpenServiceW(hSCManager,
+                               lpServiceName,
+                               SERVICE_CHANGE_CONFIG);
+            if (hSc)
+            {
+                if (ChangeServiceConfigW(hSc,
+                                         SERVICE_NO_CHANGE,
+                                         SERVICE_NO_CHANGE,
+                                         SERVICE_NO_CHANGE,
+                                         NULL,
+                                         NULL,
+                                         NULL,
+                                         NULL,
+                                         lpStartName,
+                                         lpPassword,
+                                         NULL))
+                {
+                    bRet = TRUE;
+                }
+
+                CloseServiceHandle(hSc);
+            }
+
+            UnlockServiceDatabase(scLock);
+        }
+
+        CloseServiceHandle(hSCManager);
+    }
+
+    if (!bRet)
+        GetError();
+
+    return bRet;
+}
+#endif
+
+
+static
+BOOL
+OnQueryInitialFocus(
+    HWND hwndDlg,
+    PLOGONDATA pLogonData)
+{
+    HWND hwnd = GetDlgItem(hwndDlg, pLogonData->bLocalSystem ? IDC_LOGON_SYSTEMACCOUNT : IDC_LOGON_THISACCOUNT);
+
+    SetWindowLong(hwndDlg, DWL_MSGRESULT, (LPARAM)hwnd);
+
+    return TRUE;
+}
+
+
+static
+BOOL
+OnApply(
+    HWND hwndDlg,
+    PLOGONDATA pLogonData)
+{
+    WCHAR szAccountName[64];
+    WCHAR szPassword1[64];
+    WCHAR szPassword2[64];
+    BOOL bRet = TRUE;
+
+    if (!pLogonData->bAccountChanged)
+        return TRUE;
+
+    if (SendDlgItemMessageW(hwndDlg, IDC_LOGON_SYSTEMACCOUNT, BM_GETCHECK, 0, 0) == BST_CHECKED)
+    {
+        /* System account selected */
+        wcscpy(szAccountName, L"LocalSystem");
+        wcscpy(szPassword1, L"");
+        wcscpy(szPassword2, L"");
+    }
+    else
+    {
+        /* Other account selected */
+        GetDlgItemText(hwndDlg, IDC_LOGON_ACCOUNTNAME, szAccountName, 64);
+        GetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD1, szPassword1, 64);
+        GetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD2, szPassword2, 64);
+
+        if (wcscmp(szPassword1, szPassword2))
+        {
+            ResourceMessageBox(GetModuleHandle(NULL), hwndDlg, MB_OK | MB_ICONWARNING, IDS_APPNAME, IDS_NOT_SAME_PASSWORD);
+            return FALSE;
+        }
+
+        if (!wcscmp(szPassword1, DEFAULT_PASSWORD))
+        {
+            ResourceMessageBox(GetModuleHandle(NULL), hwndDlg, MB_OK | MB_ICONWARNING, IDS_APPNAME, IDS_INVALID_PASSWORD);
+            return FALSE;
+        }
+
+
+    }
+
+#if 0
+    bRet = SetServiceAccount(pLogonData->pService->lpServiceName,
+                             szAccountName,
+                             szPassword1);
+    if (bRet == FALSE)
+    {
+
+    }
+#endif
+
+    if (bRet == TRUE)
+        pLogonData->bAccountChanged = FALSE;
+
+    return bRet;
 }
 
 
@@ -86,25 +228,30 @@ LogonPageProc(
                                  GWLP_USERDATA,
                                  (LONG_PTR)pLogonData);
 
-                pLogonData->bInitial = TRUE;
+                pLogonData->bInitialized = FALSE;
                 pLogonData->pService = ((PSERVICEPROPSHEET)(((LPPROPSHEETPAGE)lParam)->lParam))->pService;
 
                 pLogonData->pServiceConfig = GetServiceConfig(pLogonData->pService->lpServiceName);
                 if (pLogonData->pServiceConfig != NULL)
                 {
+                    wcscpy(pLogonData->szPassword1, DEFAULT_PASSWORD);
+                    wcscpy(pLogonData->szPassword2, DEFAULT_PASSWORD);
+
                     if (pLogonData->pServiceConfig->lpServiceStartName == NULL ||
                         _wcsicmp(pLogonData->pServiceConfig->lpServiceStartName, L"LocalSystem") == 0)
                     {
-                        PostMessageW(GetDlgItem(hwndDlg, IDC_LOGON_SYSTEMACCOUNT), BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
-                        PostMessageW(hwndDlg, WM_COMMAND, IDC_LOGON_SYSTEMACCOUNT, 0);
+                        SendMessageW(GetDlgItem(hwndDlg, IDC_LOGON_SYSTEMACCOUNT), BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
+                        SetControlStates(hwndDlg, pLogonData, TRUE);
                     }
                     else
                     {
                         wcscpy(pLogonData->szAccountName, pLogonData->pServiceConfig->lpServiceStartName);
-                        PostMessageW(GetDlgItem(hwndDlg, IDC_LOGON_THISACCOUNT), BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
-                        PostMessageW(hwndDlg, WM_COMMAND, IDC_LOGON_THISACCOUNT, 0);
+                        SendMessageW(GetDlgItem(hwndDlg, IDC_LOGON_THISACCOUNT), BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
+                        SetControlStates(hwndDlg, pLogonData, FALSE);
                     }
                 }
+
+                pLogonData->bInitialized = TRUE;
             }
 
             EnableWindow(GetDlgItem(hwndDlg, IDC_LOGON_HWPROFILE), FALSE);
@@ -121,30 +268,49 @@ LogonPageProc(
             switch(LOWORD(wParam))
             {
                 case IDC_LOGON_SYSTEMACCOUNT:
-                    SetControlStates(hwndDlg, pLogonData, TRUE);
+                    if (HIWORD(wParam) == BN_CLICKED)
+                    {
+                        if (pLogonData->bInitialized)
+                        {
+                            pLogonData->bAccountChanged = TRUE;
+                            PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+                        }
+                        SetControlStates(hwndDlg, pLogonData, TRUE);
+                    }
                     break;
 
                 case IDC_LOGON_THISACCOUNT:
-                    SetControlStates(hwndDlg, pLogonData, FALSE);
+                    if (HIWORD(wParam) == BN_CLICKED)
+                    {
+                        if (pLogonData->bInitialized)
+                        {
+                            pLogonData->bAccountChanged = TRUE;
+                            PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+                        }
+                        SetControlStates(hwndDlg, pLogonData, FALSE);
+                    }
                     break;
 
                 case IDC_LOGON_ACCOUNTNAME:
-                    if (HIWORD(wParam) == EN_CHANGE)
+                case IDC_LOGON_PASSWORD1:
+                case IDC_LOGON_PASSWORD2:
+                    if (HIWORD(wParam) == EN_CHANGE && pLogonData->bInitialized)
                     {
-                        pLogonData->bAccountNameChanged = TRUE;
+                        pLogonData->bAccountChanged = TRUE;
                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
                     }
                     break;
-
-
             }
             break;
 
         case WM_NOTIFY:
             switch (((LPNMHDR)lParam)->code)
             {
+                case PSN_QUERYINITIALFOCUS :
+                    return OnQueryInitialFocus(hwndDlg, pLogonData);
+
                 case PSN_APPLY:
-                    break;
+                    return OnApply(hwndDlg, pLogonData);
             }
             break;
     }
index 54e1ce8..35e9406 100644 (file)
 #define IDS_RESTART_SERVICE  12101
 #define IDS_RUN_PROGRAM      12102
 #define IDS_RESTART_COMPUTER 12103
+
+#define IDS_NOT_SAME_PASSWORD 12150
+#define IDS_INVALID_PASSWORD  12151