Author: gedmurphy
Date: Tue Jan  5 20:19:06 2010
New Revision: 44955

URL: http://svn.reactos.org/svn/reactos?rev=44955&view=rev
Log:
Display all service dependants which need stopping

Modified:
    trunk/reactos/base/applications/mscutils/servman/precomp.h
    trunk/reactos/base/applications/mscutils/servman/stop.c
    trunk/reactos/base/applications/mscutils/servman/stop_dependencies.c

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=44955&r1=44954&r2=44955&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/precomp.h [iso-8859-1] 
(original)
+++ trunk/reactos/base/applications/mscutils/servman/precomp.h [iso-8859-1] Tue 
Jan  5 20:19:06 2010
@@ -43,6 +43,8 @@
     BOOL bDlgOpen;
     BOOL bInMenuLoop;
     BOOL bIsUserAnAdmin;
+
+    PVOID pTag;
 
 } MAIN_WND_INFO, *PMAIN_WND_INFO;
 

Modified: trunk/reactos/base/applications/mscutils/servman/stop.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/stop.c?rev=44955&r1=44954&r2=44955&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/stop.c [iso-8859-1] 
(original)
+++ trunk/reactos/base/applications/mscutils/servman/stop.c [iso-8859-1] Tue 
Jan  5 20:19:06 2010
@@ -119,6 +119,7 @@
     HWND hProgress;
     LPWSTR lpServiceList;
     BOOL bRet = FALSE;
+    BOOL bStop = TRUE;
 
     if (pInfo)
     {
@@ -129,33 +130,44 @@
             lpServiceList = 
GetListOfServicesToStop(pInfo->pCurrentService->lpServiceName);
             if (lpServiceList)
             {
+                /* Tag the service list to the main wnd info */
+                pInfo->pTag = (PVOID)lpServiceList;
+
                 /* List them and ask the user if they want to stop them */
                 if (DialogBoxParamW(hInstance,
-                                    MAKEINTRESOURCEW(IDD_DLG_DEPEND_STOP),
-                                    pInfo->hMainWnd,
-                                    StopDependsDialogProc,
-                                    (LPARAM)lpServiceList) == IDOK)
+                                         MAKEINTRESOURCEW(IDD_DLG_DEPEND_STOP),
+                                         pInfo->hMainWnd,
+                                         StopDependsDialogProc,
+                                         (LPARAM)pInfo) == IDOK)
                 {
                     /* Stop all the dependant services */
                     StopDependantServices(pInfo, 
pInfo->pCurrentService->lpServiceName);
                 }
+                else
+                {
+                    /* Don't stop the main service if the user selected not to 
*/
+                    bStop = FALSE;
+                }
             }
         }
 
-        /* Create a progress window to track the progress of the stopping 
service */
-        hProgress = CreateProgressDialog(pInfo->hMainWnd,
-                                         pInfo->pCurrentService->lpServiceName,
-                                         IDS_PROGRESS_INFO_STOP);
+        if (bStop)
+        {
+            /* Create a progress window to track the progress of the stopping 
service */
+            hProgress = CreateProgressDialog(pInfo->hMainWnd,
+                                             
pInfo->pCurrentService->lpServiceName,
+                                             IDS_PROGRESS_INFO_STOP);
 
-        /* Stop the requested service */
-        bRet = StopService(pInfo,
-                           pInfo->pCurrentService->lpServiceName,
-                           hProgress);
+            /* Stop the requested service */
+            bRet = StopService(pInfo,
+                               pInfo->pCurrentService->lpServiceName,
+                               hProgress);
 
-        if (hProgress)
-        {
-            /* Complete and destroy the progress bar */
-            DestroyProgressDialog(hProgress, TRUE);
+            if (hProgress)
+            {
+                /* Complete and destroy the progress bar */
+                DestroyProgressDialog(hProgress, TRUE);
+            }
         }
     }
 

Modified: trunk/reactos/base/applications/mscutils/servman/stop_dependencies.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/stop_dependencies.c?rev=44955&r1=44954&r2=44955&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/stop_dependencies.c 
[iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/servman/stop_dependencies.c 
[iso-8859-1] Tue Jan  5 20:19:06 2010
@@ -125,10 +125,49 @@
 }
 
 
+static VOID
+AddServiceNamesToStop(HWND hServiceListBox,
+                      LPWSTR lpServiceList)
+{
+    LPQUERY_SERVICE_CONFIG lpServiceConfig;
+    LPWSTR lpStr;
+
+    lpStr = lpServiceList;
+
+    /* Loop through all the services in the list */
+    while (TRUE)
+    {
+        /* Break when we hit the double null */
+        if (*lpStr == L'\0' && *(lpStr + 1) == L'\0')
+            break;
+
+        /* If this isn't our first time in the loop we'll
+           have been left on a null char */
+        if (*lpStr == L'\0')
+            lpStr++;
+
+        /* Get the service's display name */
+        lpServiceConfig = GetServiceConfig(lpStr);
+        if (lpServiceConfig)
+        {
+            /* Add the service to the listbox */
+            SendMessageW(hServiceListBox,
+                         LB_ADDSTRING,
+                         0,
+                         (LPARAM)lpServiceConfig->lpDisplayName);
+        }
+
+        /* Move onto the next string */
+        while (*lpStr != L'\0')
+            lpStr++;
+    }
+}
+
 static BOOL
 DoInitDependsDialog(PMAIN_WND_INFO pInfo,
                     HWND hDlg)
 {
+    HWND hServiceListBox;
     LPWSTR lpPartialStr, lpStr;
     DWORD fullLen;
     HICON hIcon = NULL;
@@ -196,8 +235,14 @@
                      lpPartialStr);
         }
 
-        /* FIXME: Load the list of services which need stopping */
-
+        /* Display the list of services which need stopping */
+        hServiceListBox = GetDlgItem(hDlg,
+                                     IDC_STOP_DEPENDS_LB);
+        if (hServiceListBox)
+        {
+            AddServiceNamesToStop(hServiceListBox,
+                                  (LPWSTR)pInfo->pTag);
+        }
     }
 
     return bRet;


Reply via email to