[ros-diffs] [gbrunmar] 30985: Fixed some minor things with (yet unused) svchost

gbrunmar at svn.reactos.org gbrunmar at svn.reactos.org
Mon Dec 3 19:24:06 CET 2007


Author: gbrunmar
Date: Mon Dec  3 21:24:05 2007
New Revision: 30985

URL: http://svn.reactos.org/svn/reactos?rev=30985&view=rev
Log:
Fixed some minor things with (yet unused) svchost

Modified:
    trunk/reactos/base/services/svchost/svchost.c

Modified: trunk/reactos/base/services/svchost/svchost.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/svchost/svchost.c?rev=30985&r1=30984&r2=30985&view=diff
==============================================================================
--- trunk/reactos/base/services/svchost/svchost.c (original)
+++ trunk/reactos/base/services/svchost/svchost.c Mon Dec  3 21:24:05 2007
@@ -102,11 +102,12 @@
 	HeapFree(GetProcessHeap(), 0, Buffer);
 
 	/* Load the service dll */
+	DPRINT1("Trying to load dll\n");
 	hServiceDll = LoadLibrary(DllPath);
 
 	if (NULL == hServiceDll)
 	{
-		DPRINT1("Unable to load ServiceDll: %s\n", DllPath);
+		DPRINT1("Unable to load ServiceDll: %s, ErrorCode: %u\n", DllPath, GetLastError());
 		return FALSE;
 	}
 
@@ -208,39 +209,47 @@
 {
 	DWORD NrOfServices;
 	LPSERVICE_TABLE_ENTRY ServiceTable;
-	DWORD i;
 
 	if (argc < 3)
 	{
 		/* MS svchost.exe doesn't seem to print help, should we? */
-		return 1;
+		return 0;
 	}
 
 	if (_tcscmp(argv[1], _T("-k")) != 0)
 	{
 		/* For now, we only handle "-k" */
-		return 1;
+		return 0;
 	}
 
 	NrOfServices = LoadServiceCategory(argv[2]);
 
+	DPRINT1("NrOfServices: %lu\n", NrOfServices);
 	if (0 == NrOfServices)
-		return 1;
+		return 0;
 
 	ServiceTable = HeapAlloc(GetProcessHeap(), 0, sizeof(SERVICE_TABLE_ENTRY) * (NrOfServices + 1));
 
 	if (NULL != ServiceTable)
 	{
+		DWORD i;
 		PSERVICE Service = FirstService;
 
+		/* Fill the service table */
 		for (i = 0; i < NrOfServices; ++i)
 		{
+			DPRINT1("Loading service: %s\n", Service->Name);
 			ServiceTable[i].lpServiceName = Service->Name;
 			ServiceTable[i].lpServiceProc = Service->ServiceMainFunc;
 			Service = Service->Next;
 		}
 
-		StartServiceCtrlDispatcher(ServiceTable);
+		/* Set a NULL entry to end the service table */
+		ServiceTable[i].lpServiceName = NULL;
+		ServiceTable[i].lpServiceProc = NULL;
+
+		if (FALSE == StartServiceCtrlDispatcher(ServiceTable))
+			printf("Failed to start service control dispatcher, ErrorCode: %lu\n", GetLastError());
 
 		HeapFree(GetProcessHeap(), 0, ServiceTable);
 	}
@@ -249,6 +258,7 @@
 		DPRINT1("Not enough memory for the service table, trying to allocate %u bytes\n", sizeof(SERVICE_TABLE_ENTRY) * (NrOfServices + 1));
 	}
 
+	DPRINT1("Freeing services...\n");
 	FreeServices();
 
     return 0;




More information about the Ros-diffs mailing list