Author: ekohl
Date: Tue Jul 19 21:30:45 2016
New Revision: 71971

URL: http://svn.reactos.org/svn/reactos?rev=71971&view=rev
Log:
[SERVICES]
Service logon page:
- Handle the interactive service type flag.
- Change the service configuration in the apply function.

Modified:
    trunk/reactos/base/applications/mscutils/servman/propsheet_logon.c

Modified: trunk/reactos/base/applications/mscutils/servman/propsheet_logon.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/propsheet_logon.c?rev=71971&r1=71970&r2=71971&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/propsheet_logon.c  
[iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/servman/propsheet_logon.c  
[iso-8859-1] Tue Jul 19 21:30:45 2016
@@ -20,6 +20,7 @@
     WCHAR szAccountName[64];
     WCHAR szPassword1[64];
     WCHAR szPassword2[64];
+    INT nInteractive;
     BOOL bInitialized;
     BOOL bLocalSystem;
     BOOL bAccountChanged;
@@ -43,6 +44,8 @@
 
     if (bLocalSystem)
     {
+        SendDlgItemMessageW(hwndDlg, IDC_LOGON_INTERACTIVE, BM_SETCHECK, 
(WPARAM)pLogonData->nInteractive, 0);
+
         if (pLogonData->bInitialized == TRUE)
         {
             GetDlgItemText(hwndDlg, IDC_LOGON_ACCOUNTNAME, 
pLogonData->szAccountName, 64);
@@ -56,6 +59,10 @@
     }
     else
     {
+        if (pLogonData->bInitialized == TRUE)
+            pLogonData->nInteractive = SendDlgItemMessageW(hwndDlg, 
IDC_LOGON_INTERACTIVE, BM_GETCHECK, 0, 0);
+        SendDlgItemMessageW(hwndDlg, IDC_LOGON_INTERACTIVE, BM_SETCHECK, 
(WPARAM)BST_UNCHECKED, 0);
+
         SetDlgItemText(hwndDlg, IDC_LOGON_ACCOUNTNAME, 
pLogonData->szAccountName);
         SetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD1, pLogonData->szPassword1);
         SetDlgItemText(hwndDlg, IDC_LOGON_PASSWORD2, pLogonData->szPassword2);
@@ -65,10 +72,11 @@
 }
 
 
-#if 0
+static
 BOOL
 SetServiceAccount(
     LPWSTR lpServiceName,
+    DWORD dwServiceType,
     LPWSTR lpStartName,
     LPWSTR lpPassword)
 {
@@ -91,7 +99,7 @@
             if (hSc)
             {
                 if (ChangeServiceConfigW(hSc,
-                                         SERVICE_NO_CHANGE,
+                                         dwServiceType,
                                          SERVICE_NO_CHANGE,
                                          SERVICE_NO_CHANGE,
                                          NULL,
@@ -119,7 +127,6 @@
 
     return bRet;
 }
-#endif
 
 
 static
@@ -145,6 +152,7 @@
     WCHAR szAccountName[64];
     WCHAR szPassword1[64];
     WCHAR szPassword2[64];
+    DWORD dwServiceType = SERVICE_NO_CHANGE;
     BOOL bRet = TRUE;
 
     if (!pLogonData->bAccountChanged)
@@ -156,6 +164,13 @@
         wcscpy(szAccountName, L"LocalSystem");
         wcscpy(szPassword1, L"");
         wcscpy(szPassword2, L"");
+
+        /* Handle the interactive flag */
+        dwServiceType = pLogonData->pServiceConfig->dwServiceType;
+        if (SendDlgItemMessageW(hwndDlg, IDC_LOGON_INTERACTIVE, BM_GETCHECK, 
0, 0) == BST_CHECKED)
+            dwServiceType |= SERVICE_INTERACTIVE_PROCESS;
+        else
+            dwServiceType &= ~SERVICE_INTERACTIVE_PROCESS;
     }
     else
     {
@@ -175,22 +190,23 @@
             ResourceMessageBox(GetModuleHandle(NULL), hwndDlg, MB_OK | 
MB_ICONWARNING, IDS_APPNAME, IDS_INVALID_PASSWORD);
             return FALSE;
         }
-
-
-    }
-
-#if 0
+    }
+
+
     bRet = SetServiceAccount(pLogonData->pService->lpServiceName,
+                             dwServiceType,
                              szAccountName,
                              szPassword1);
     if (bRet == FALSE)
     {
 
     }
-#endif
 
     if (bRet == TRUE)
+    {
         pLogonData->bAccountChanged = FALSE;
+
+    }
 
     return bRet;
 }
@@ -240,13 +256,17 @@
                     if (pLogonData->pServiceConfig->lpServiceStartName == NULL 
||
                         
_wcsicmp(pLogonData->pServiceConfig->lpServiceStartName, L"LocalSystem") == 0)
                     {
-                        SendMessageW(GetDlgItem(hwndDlg, 
IDC_LOGON_SYSTEMACCOUNT), BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
+                        SendDlgItemMessageW(hwndDlg, IDC_LOGON_SYSTEMACCOUNT, 
BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
+                        if (pLogonData->pServiceConfig->dwServiceType & 
SERVICE_INTERACTIVE_PROCESS) {
+                            pLogonData->nInteractive = BST_CHECKED;
+                            SendDlgItemMessageW(hwndDlg, 
IDC_LOGON_INTERACTIVE, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
+                        }
                         SetControlStates(hwndDlg, pLogonData, TRUE);
                     }
                     else
                     {
                         wcscpy(pLogonData->szAccountName, 
pLogonData->pServiceConfig->lpServiceStartName);
-                        SendMessageW(GetDlgItem(hwndDlg, 
IDC_LOGON_THISACCOUNT), BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
+                        SendDlgItemMessageW(hwndDlg, IDC_LOGON_THISACCOUNT, 
BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
                         SetControlStates(hwndDlg, pLogonData, FALSE);
                     }
                 }
@@ -291,6 +311,17 @@
                     }
                     break;
 
+                case IDC_LOGON_INTERACTIVE:
+                    if (HIWORD(wParam) == BN_CLICKED)
+                    {
+                        if (pLogonData->bInitialized && 
pLogonData->bInitialized)
+                        {
+                            pLogonData->bAccountChanged = TRUE;
+                            PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+                        }
+                    }
+                    break;
+
                 case IDC_LOGON_ACCOUNTNAME:
                 case IDC_LOGON_PASSWORD1:
                 case IDC_LOGON_PASSWORD2:
@@ -306,7 +337,7 @@
         case WM_NOTIFY:
             switch (((LPNMHDR)lParam)->code)
             {
-                case PSN_QUERYINITIALFOCUS :
+                case PSN_QUERYINITIALFOCUS:
                     return OnQueryInitialFocus(hwndDlg, pLogonData);
 
                 case PSN_APPLY:


Reply via email to