From 17cc3322a5288b22db983c0dca659848ed7b303e Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 18 Jul 2016 21:49:19 +0000 Subject: [PATCH] [SERVMAN] 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 --- .../mscutils/servman/lang/bg-BG.rc | 6 + .../mscutils/servman/lang/cs-CZ.rc | 6 + .../mscutils/servman/lang/de-DE.rc | 14 +- .../mscutils/servman/lang/el-GR.rc | 6 + .../mscutils/servman/lang/en-US.rc | 6 + .../mscutils/servman/lang/es-ES.rc | 6 + .../mscutils/servman/lang/fr-FR.rc | 6 + .../mscutils/servman/lang/he-IL.rc | 6 + .../mscutils/servman/lang/id-ID.rc | 7 + .../mscutils/servman/lang/it-IT.rc | 6 + .../mscutils/servman/lang/ja-JP.rc | 6 + .../mscutils/servman/lang/ko-KR.rc | 6 + .../mscutils/servman/lang/no-NO.rc | 6 + .../mscutils/servman/lang/pl-PL.rc | 6 + .../mscutils/servman/lang/ro-RO.rc | 6 + .../mscutils/servman/lang/ru-RU.rc | 7 + .../mscutils/servman/lang/sk-SK.rc | 6 + .../mscutils/servman/lang/sq-AL.rc | 6 + .../mscutils/servman/lang/sv-SE.rc | 6 + .../mscutils/servman/lang/th-TH.rc | 7 + .../mscutils/servman/lang/tr-TR.rc | 6 + .../mscutils/servman/lang/uk-UA.rc | 6 + .../mscutils/servman/lang/zh-CN.rc | 6 + .../mscutils/servman/lang/zh-TW.rc | 6 + .../base/applications/mscutils/servman/misc.c | 21 ++ .../applications/mscutils/servman/precomp.h | 7 + .../mscutils/servman/propsheet_logon.c | 236 +++++++++++++++--- .../applications/mscutils/servman/resource.h | 3 + 28 files changed, 383 insertions(+), 39 deletions(-) diff --git a/reactos/base/applications/mscutils/servman/lang/bg-BG.rc b/reactos/base/applications/mscutils/servman/lang/bg-BG.rc index b92eab866ec..112f0930b85 100644 --- a/reactos/base/applications/mscutils/servman/lang/bg-BG.rc +++ b/reactos/base/applications/mscutils/servman/lang/bg-BG.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/cs-CZ.rc b/reactos/base/applications/mscutils/servman/lang/cs-CZ.rc index ca676571e2b..9b56fc84f19 100644 --- a/reactos/base/applications/mscutils/servman/lang/cs-CZ.rc +++ b/reactos/base/applications/mscutils/servman/lang/cs-CZ.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/de-DE.rc b/reactos/base/applications/mscutils/servman/lang/de-DE.rc index 9910f9d7fc6..a3819c6fe6a 100644 --- a/reactos/base/applications/mscutils/servman/lang/de-DE.rc +++ b/reactos/base/applications/mscutils/servman/lang/de-DE.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/el-GR.rc b/reactos/base/applications/mscutils/servman/lang/el-GR.rc index eedf64f3807..4e700e9cb23 100644 --- a/reactos/base/applications/mscutils/servman/lang/el-GR.rc +++ b/reactos/base/applications/mscutils/servman/lang/el-GR.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/en-US.rc b/reactos/base/applications/mscutils/servman/lang/en-US.rc index 09514a3f945..d921ca0e917 100644 --- a/reactos/base/applications/mscutils/servman/lang/en-US.rc +++ b/reactos/base/applications/mscutils/servman/lang/en-US.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/es-ES.rc b/reactos/base/applications/mscutils/servman/lang/es-ES.rc index 2628d284d69..5a964aabe10 100644 --- a/reactos/base/applications/mscutils/servman/lang/es-ES.rc +++ b/reactos/base/applications/mscutils/servman/lang/es-ES.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/fr-FR.rc b/reactos/base/applications/mscutils/servman/lang/fr-FR.rc index 703ea9796cb..ad22a6cd504 100644 --- a/reactos/base/applications/mscutils/servman/lang/fr-FR.rc +++ b/reactos/base/applications/mscutils/servman/lang/fr-FR.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/he-IL.rc b/reactos/base/applications/mscutils/servman/lang/he-IL.rc index dfbc64e74c7..2d6f4218acd 100644 --- a/reactos/base/applications/mscutils/servman/lang/he-IL.rc +++ b/reactos/base/applications/mscutils/servman/lang/he-IL.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/id-ID.rc b/reactos/base/applications/mscutils/servman/lang/id-ID.rc index 27f3f6fb98e..0407f5beb3c 100644 --- a/reactos/base/applications/mscutils/servman/lang/id-ID.rc +++ b/reactos/base/applications/mscutils/servman/lang/id-ID.rc @@ -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 + diff --git a/reactos/base/applications/mscutils/servman/lang/it-IT.rc b/reactos/base/applications/mscutils/servman/lang/it-IT.rc index 94512e266e9..31485e6be29 100644 --- a/reactos/base/applications/mscutils/servman/lang/it-IT.rc +++ b/reactos/base/applications/mscutils/servman/lang/it-IT.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/ja-JP.rc b/reactos/base/applications/mscutils/servman/lang/ja-JP.rc index dc6b084acca..36affab1d35 100644 --- a/reactos/base/applications/mscutils/servman/lang/ja-JP.rc +++ b/reactos/base/applications/mscutils/servman/lang/ja-JP.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/ko-KR.rc b/reactos/base/applications/mscutils/servman/lang/ko-KR.rc index 8be1a256183..7d229807d86 100644 --- a/reactos/base/applications/mscutils/servman/lang/ko-KR.rc +++ b/reactos/base/applications/mscutils/servman/lang/ko-KR.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/no-NO.rc b/reactos/base/applications/mscutils/servman/lang/no-NO.rc index 82ddf96adc8..707c21516a3 100644 --- a/reactos/base/applications/mscutils/servman/lang/no-NO.rc +++ b/reactos/base/applications/mscutils/servman/lang/no-NO.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/pl-PL.rc b/reactos/base/applications/mscutils/servman/lang/pl-PL.rc index 213ff0ca7b8..4fc0a0c68ef 100644 --- a/reactos/base/applications/mscutils/servman/lang/pl-PL.rc +++ b/reactos/base/applications/mscutils/servman/lang/pl-PL.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/ro-RO.rc b/reactos/base/applications/mscutils/servman/lang/ro-RO.rc index af47aaaad2d..4faee647141 100644 --- a/reactos/base/applications/mscutils/servman/lang/ro-RO.rc +++ b/reactos/base/applications/mscutils/servman/lang/ro-RO.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/ru-RU.rc b/reactos/base/applications/mscutils/servman/lang/ru-RU.rc index c1ea2c6a2bb..f44bd771e07 100644 --- a/reactos/base/applications/mscutils/servman/lang/ru-RU.rc +++ b/reactos/base/applications/mscutils/servman/lang/ru-RU.rc @@ -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 + diff --git a/reactos/base/applications/mscutils/servman/lang/sk-SK.rc b/reactos/base/applications/mscutils/servman/lang/sk-SK.rc index 114b116a756..cbdfa10f326 100644 --- a/reactos/base/applications/mscutils/servman/lang/sk-SK.rc +++ b/reactos/base/applications/mscutils/servman/lang/sk-SK.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/sq-AL.rc b/reactos/base/applications/mscutils/servman/lang/sq-AL.rc index 9212c54ac8c..261f292d451 100644 --- a/reactos/base/applications/mscutils/servman/lang/sq-AL.rc +++ b/reactos/base/applications/mscutils/servman/lang/sq-AL.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/sv-SE.rc b/reactos/base/applications/mscutils/servman/lang/sv-SE.rc index 40ac7a033d6..c0de6d638c2 100644 --- a/reactos/base/applications/mscutils/servman/lang/sv-SE.rc +++ b/reactos/base/applications/mscutils/servman/lang/sv-SE.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/th-TH.rc b/reactos/base/applications/mscutils/servman/lang/th-TH.rc index 215fce96332..9547045aab3 100644 --- a/reactos/base/applications/mscutils/servman/lang/th-TH.rc +++ b/reactos/base/applications/mscutils/servman/lang/th-TH.rc @@ -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 + diff --git a/reactos/base/applications/mscutils/servman/lang/tr-TR.rc b/reactos/base/applications/mscutils/servman/lang/tr-TR.rc index e0e5fd29aea..4869c4d451e 100644 --- a/reactos/base/applications/mscutils/servman/lang/tr-TR.rc +++ b/reactos/base/applications/mscutils/servman/lang/tr-TR.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/uk-UA.rc b/reactos/base/applications/mscutils/servman/lang/uk-UA.rc index 7d24dee681e..30bc170a606 100644 --- a/reactos/base/applications/mscutils/servman/lang/uk-UA.rc +++ b/reactos/base/applications/mscutils/servman/lang/uk-UA.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/zh-CN.rc b/reactos/base/applications/mscutils/servman/lang/zh-CN.rc index 10c2b88649c..2bd3e010819 100644 --- a/reactos/base/applications/mscutils/servman/lang/zh-CN.rc +++ b/reactos/base/applications/mscutils/servman/lang/zh-CN.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/lang/zh-TW.rc b/reactos/base/applications/mscutils/servman/lang/zh-TW.rc index 93aca0dfa56..f19398d0831 100644 --- a/reactos/base/applications/mscutils/servman/lang/zh-TW.rc +++ b/reactos/base/applications/mscutils/servman/lang/zh-TW.rc @@ -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 diff --git a/reactos/base/applications/mscutils/servman/misc.c b/reactos/base/applications/mscutils/servman/misc.c index b3d22efa6f3..3cd52019222 100644 --- a/reactos/base/applications/mscutils/servman/misc.c +++ b/reactos/base/applications/mscutils/servman/misc.c @@ -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); +} + diff --git a/reactos/base/applications/mscutils/servman/precomp.h b/reactos/base/applications/mscutils/servman/precomp.h index 8923e0d35ac..af527f3438b 100644 --- a/reactos/base/applications/mscutils/servman/precomp.h +++ b/reactos/base/applications/mscutils/servman/precomp.h @@ -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 */ diff --git a/reactos/base/applications/mscutils/servman/propsheet_logon.c b/reactos/base/applications/mscutils/servman/propsheet_logon.c index edfc26d105e..e8694514050 100644 --- a/reactos/base/applications/mscutils/servman/propsheet_logon.c +++ b/reactos/base/applications/mscutils/servman/propsheet_logon.c @@ -11,6 +11,8 @@ #define NDEBUG #include +#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); + 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 == TRUE && pLogonData->bInitial == FALSE) + 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); } - 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->bLocalSystem = bLocalSystem; +} - 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); - break; - - case IDC_LOGON_THISACCOUNT: - SetControlStates(hwndDlg, pLogonData, FALSE); - break; - - case IDC_LOGON_ACCOUNTNAME: - if (HIWORD(wParam) == EN_CHANGE) + if (HIWORD(wParam) == BN_CLICKED) { - pLogonData->bAccountNameChanged = TRUE; - PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + if (pLogonData->bInitialized) + { + pLogonData->bAccountChanged = TRUE; + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + } + SetControlStates(hwndDlg, pLogonData, TRUE); } break; + case IDC_LOGON_THISACCOUNT: + 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: + case IDC_LOGON_PASSWORD1: + case IDC_LOGON_PASSWORD2: + if (HIWORD(wParam) == EN_CHANGE && pLogonData->bInitialized) + { + 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; } diff --git a/reactos/base/applications/mscutils/servman/resource.h b/reactos/base/applications/mscutils/servman/resource.h index 54e1ce84328..35e9406ffdd 100644 --- a/reactos/base/applications/mscutils/servman/resource.h +++ b/reactos/base/applications/mscutils/servman/resource.h @@ -219,3 +219,6 @@ #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