[ros-diffs] [gedmurphy] 28651: - implement changing of the startup type from the properties dialog - add functionality for changing the startup type listview text - fix a couple of bugs

gedmurphy at svn.reactos.org gedmurphy at svn.reactos.org
Wed Aug 29 17:46:54 CEST 2007


Author: gedmurphy
Date: Wed Aug 29 19:46:52 2007
New Revision: 28651

URL: http://svn.reactos.org/svn/reactos?rev=28651&view=rev
Log:
- implement changing of the startup type from the properties dialog
- add functionality for changing the startup type listview text
- fix a couple of bugs

Modified:
    trunk/reactos/base/applications/mscutils/servman/mainwnd.c
    trunk/reactos/base/applications/mscutils/servman/precomp.h
    trunk/reactos/base/applications/mscutils/servman/propsheet.c
    trunk/reactos/base/applications/mscutils/servman/query.c
    trunk/reactos/base/applications/mscutils/servman/start.c

Modified: trunk/reactos/base/applications/mscutils/servman/mainwnd.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/mainwnd.c?rev=28651&r1=28650&r2=28651&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/mainwnd.c (original)
+++ trunk/reactos/base/applications/mscutils/servman/mainwnd.c Wed Aug 29 19:46:52 2007
@@ -8,12 +8,6 @@
  */
 
 #include "precomp.h"
-
-#define LVNAME 0
-#define LVDESC 1
-#define LVSTATUS 2
-#define LVSTARTUP 3
-#define LVLOGONAS 4
 
 static const TCHAR szMainWndClass[] = TEXT("ServManWndClass");
 
@@ -142,70 +136,112 @@
     }
 }
 
-static VOID
+VOID
 ChangeListViewText(PMAIN_WND_INFO Info,
+                   ENUM_SERVICE_STATUS_PROCESS* pService,
                    UINT Column)
 {
-    LVITEM item;
-
-    item.iItem = Info->SelectedItem;
-    item.iSubItem = Column;
-
-    switch (Column)
-    {
-        case LVNAME:
-
-        break;
-
-        case LVDESC:
-        {
-            LPTSTR lpDescription;
-
-            lpDescription = GetServiceDescription(Info->pCurrentService->lpServiceName);
-
-            item.pszText = lpDescription;
-            SendMessage(Info->hListView,
-                        LVM_SETITEMTEXT,
-                        item.iItem,
-                        (LPARAM) &item);
-
-            HeapFree(ProcessHeap,
-                     0,
-                     lpDescription);
-        }
-        break;
-
-        case LVSTATUS:
-        {
-            TCHAR szStatus[64];
-
-            if (Info->pCurrentService->ServiceStatusProcess.dwCurrentState == SERVICE_RUNNING)
+    LVFINDINFO lvfi;
+    LVITEM lvItem;
+    INT index;
+
+    lvfi.flags = LVFI_PARAM;
+    lvfi.lParam = (LPARAM)pService;
+    index = ListView_FindItem(Info->hListView,
+                              -1,
+                              &lvfi);
+    if (index != -1)
+    {
+        lvItem.iItem = index;
+        lvItem.iSubItem = Column;
+
+        switch (Column)
+        {
+            case LVNAME:
+
+            break;
+
+            case LVDESC:
             {
-                LoadString(hInstance,
-                           IDS_SERVICES_STARTED,
-                           szStatus,
-                           sizeof(szStatus) / sizeof(TCHAR));
+                LPTSTR lpDescription;
+
+                lpDescription = GetServiceDescription(pService->lpServiceName);
+
+                lvItem.pszText = lpDescription;
+                SendMessage(Info->hListView,
+                            LVM_SETITEMTEXT,
+                            lvItem.iItem,
+                            (LPARAM) &lvItem);
+
+                HeapFree(ProcessHeap,
+                         0,
+                         lpDescription);
             }
-            else
+            break;
+
+            case LVSTATUS:
             {
-                szStatus[0] = 0;
+                TCHAR szStatus[64];
+
+                if (pService->ServiceStatusProcess.dwCurrentState == SERVICE_RUNNING)
+                {
+                    LoadString(hInstance,
+                               IDS_SERVICES_STARTED,
+                               szStatus,
+                               sizeof(szStatus) / sizeof(TCHAR));
+                }
+                else
+                {
+                    szStatus[0] = 0;
+                }
+
+                lvItem.pszText = szStatus;
+                SendMessage(Info->hListView,
+                            LVM_SETITEMTEXT,
+                            lvItem.iItem,
+                            (LPARAM) &lvItem);
             }
-
-            item.pszText = szStatus;
-            SendMessage(Info->hListView,
-                        LVM_SETITEMTEXT,
-                        item.iItem,
-                        (LPARAM) &item);
-        }
-        break;
-
-        case LVSTARTUP:
-
-        break;
-
-        case LVLOGONAS:
-
-        break;
+            break;
+
+            case LVSTARTUP:
+            {
+                LPQUERY_SERVICE_CONFIG lpServiceConfig;
+                LPTSTR lpStartup = NULL;
+                DWORD StringId = 0;
+
+                lpServiceConfig = GetServiceConfig(pService->lpServiceName);
+
+                switch (lpServiceConfig->dwStartType)
+                {
+                    case 2: StringId = IDS_SERVICES_AUTO; break;
+                    case 3: StringId = IDS_SERVICES_MAN; break;
+                    case 4: StringId = IDS_SERVICES_DIS; break;
+                }
+
+                if (StringId)
+                    AllocAndLoadString(&lpStartup,
+                                       hInstance,
+                                       StringId);
+
+                lvItem.pszText = lpStartup;
+                SendMessage(Info->hListView,
+                            LVM_SETITEMTEXT,
+                            lvItem.iItem,
+                            (LPARAM)&lvItem);
+
+                HeapFree(ProcessHeap,
+                         0,
+                         lpStartup);
+                HeapFree(ProcessHeap,
+                         0,
+                         lpServiceConfig);
+            }
+            break;
+
+            case LVLOGONAS:
+
+            break;
+        }
     }
 }
 
@@ -715,7 +751,7 @@
             if (DoStart(Info))
             {
                 UpdateServiceStatus(Info->pCurrentService);
-                ChangeListViewText(Info, LVSTATUS);
+                ChangeListViewText(Info, Info->pCurrentService, LVSTATUS);
                 SetMenuAndButtonStates(Info);
                 SetFocus(Info->hListView);
             }
@@ -726,7 +762,7 @@
             if (DoStop(Info))
             {
                 UpdateServiceStatus(Info->pCurrentService);
-                ChangeListViewText(Info, LVSTATUS);
+                ChangeListViewText(Info, Info->pCurrentService, LVSTATUS);
                 SetMenuAndButtonStates(Info);
                 SetFocus(Info->hListView);
             }
@@ -745,7 +781,7 @@
             {
                 DoStart(Info);
                 UpdateServiceStatus(Info->pCurrentService);
-                ChangeListViewText(Info, LVSTATUS);
+                ChangeListViewText(Info, Info->pCurrentService, LVSTATUS);
                 SetMenuAndButtonStates(Info);
                 SetFocus(Info->hListView);
             }

Modified: trunk/reactos/base/applications/mscutils/servman/precomp.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/precomp.h?rev=28651&r1=28650&r2=28651&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/precomp.h (original)
+++ trunk/reactos/base/applications/mscutils/servman/precomp.h Wed Aug 29 19:46:52 2007
@@ -16,6 +16,12 @@
 
 #define NO_ITEM_SELECTED -1
 #define MAX_KEY_LENGTH 256
+
+#define LVNAME 0
+#define LVDESC 1
+#define LVSTATUS 2
+#define LVSTARTUP 3
+#define LVLOGONAS 4
 
 typedef struct _MAIN_WND_INFO
 {
@@ -54,6 +60,7 @@
     UINT HintId;
 } MENU_HINT, *PMENU_HINT;
 
+VOID ChangeListViewText(PMAIN_WND_INFO Info, ENUM_SERVICE_STATUS_PROCESS* pService, UINT Column);
 BOOL InitMainWindowImpl(VOID);
 VOID UninitMainWindowImpl(VOID);
 HWND CreateMainWindow(LPCTSTR lpCaption, int nCmdShow);

Modified: trunk/reactos/base/applications/mscutils/servman/propsheet.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/propsheet.c?rev=28651&r1=28650&r2=28651&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/propsheet.c (original)
+++ trunk/reactos/base/applications/mscutils/servman/propsheet.c Wed Aug 29 19:46:52 2007
@@ -200,6 +200,7 @@
     }
 }
 
+
 VOID
 SaveDlgInfo(PSERVICEPROPSHEET dlgInfo,
             HWND hwndDlg)
@@ -208,21 +209,40 @@
     HWND hList;
     DWORD StartUp;
 
-    hList = GetDlgItem(hwndDlg, IDC_START_TYPE);
-
-    StartUp = SendMessage(hList,
-                          CB_GETCURSEL,
-                          0,
-                          0);
-
-    switch (StartUp)
-    {
-        case 0: pServiceConfig->dwStartType = SERVICE_AUTO_START; break;
-        case 1: pServiceConfig->dwStartType = SERVICE_DEMAND_START; break;
-        case 2: pServiceConfig->dwStartType = SERVICE_DISABLED; break;
-    }
-}
-
+    pServiceConfig = HeapAlloc(ProcessHeap,
+                               HEAP_ZERO_MEMORY,
+                               sizeof(*pServiceConfig));
+    if (pServiceConfig)
+    {
+        pServiceConfig->dwServiceType = SERVICE_NO_CHANGE;
+        pServiceConfig->dwErrorControl = SERVICE_NO_CHANGE;
+
+        hList = GetDlgItem(hwndDlg, IDC_START_TYPE);
+        StartUp = SendMessage(hList,
+                              CB_GETCURSEL,
+                              0,
+                              0);
+        switch (StartUp)
+        {
+            case 0: pServiceConfig->dwStartType = SERVICE_AUTO_START; break;
+            case 1: pServiceConfig->dwStartType = SERVICE_DEMAND_START; break;
+            case 2: pServiceConfig->dwStartType = SERVICE_DISABLED; break;
+        }
+
+        if (SetServiceConfig(pServiceConfig,
+                             dlgInfo->pService->lpServiceName,
+                             NULL))
+        {
+            ChangeListViewText(dlgInfo->Info,
+                               dlgInfo->pService,
+                               LVSTARTUP);
+        }
+
+        HeapFree(ProcessHeap,
+                 0,
+                 pServiceConfig);
+    }
+}
 
 
 /*
@@ -317,7 +337,7 @@
                 switch (lpnm->code)
                 {
                     case PSN_APPLY:
-                        MessageBox(NULL, _T("apply"), NULL, 0);
+                        SaveDlgInfo(dlgInfo, hwndDlg);
                     break;
                 }
             }

Modified: trunk/reactos/base/applications/mscutils/servman/query.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/query.c?rev=28651&r1=28650&r2=28651&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/query.c (original)
+++ trunk/reactos/base/applications/mscutils/servman/query.c Wed Aug 29 19:46:52 2007
@@ -110,7 +110,7 @@
         {
             hSc = OpenService(hSCManager,
                               lpServiceName,
-                              SERVICE_QUERY_CONFIG);
+                              SERVICE_CHANGE_CONFIG);
             if (hSc)
             {
                 if (ChangeServiceConfig(hSc,
@@ -119,7 +119,7 @@
                                         pServiceConfig->dwErrorControl,
                                         pServiceConfig->lpBinaryPathName,
                                         pServiceConfig->lpLoadOrderGroup,
-                                        &pServiceConfig->dwTagId,
+                                        pServiceConfig->dwTagId ? &pServiceConfig->dwTagId : NULL,
                                         pServiceConfig->lpDependencies,
                                         pServiceConfig->lpServiceStartName,
                                         lpPassword,

Modified: trunk/reactos/base/applications/mscutils/servman/start.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/start.c?rev=28651&r1=28650&r2=28651&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/start.c (original)
+++ trunk/reactos/base/applications/mscutils/servman/start.c Wed Aug 29 19:46:52 2007
@@ -24,7 +24,7 @@
     hSCManager = OpenSCManager(NULL,
                                NULL,
                                SC_MANAGER_ALL_ACCESS);
-    if (hSCManager == NULL)
+    if (hSCManager != NULL)
     {
         hSc = OpenService(hSCManager,
                           Info->pCurrentService->lpServiceName,




More information about the Ros-diffs mailing list