[SERVICES]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 18 Dec 2012 20:38:54 +0000 (20:38 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 18 Dec 2012 20:38:54 +0000 (20:38 +0000)
- services.exe is indeed a GUI program, so build it as such.
- Check the return value of RegisterServicesProcess and thus allow only one instance of services.exe to be launched.

CORE-6123 #resolve #comment Fixed by r57946.

svn path=/trunk/; revision=57946

reactos/base/system/services/CMakeLists.txt
reactos/base/system/services/services.c

index 006f5c4..66fefbc 100644 (file)
@@ -25,7 +25,7 @@ if(NOT MSVC)
     target_link_libraries(services ${PSEH_LIB})
 endif()
 
-set_module_type(services win32cui UNICODE)
+set_module_type(services win32gui UNICODE)
 add_importlibs(services user32 advapi32 rpcrt4 msvcrt kernel32 ntdll)
 add_pch(services services.h ${CMAKE_CURRENT_BINARY_DIR}/svcctl_s.h)
 add_cd_file(TARGET services DESTINATION reactos/system32 FOR all)
index 982e0fb..1245fd3 100644 (file)
@@ -8,10 +8,6 @@
  *
  */
 
-/* NOTE:
- * - Services.exe is NOT a native application, it is a GUI app.
- */
-
 /* INCLUDES *****************************************************************/
 
 #include "services.h"
@@ -393,7 +389,7 @@ wWinMain(HINSTANCE hInstance,
         goto done;
     }
 
-    /* Create the service database */
+    /* Create the services database */
     dwError = ScmCreateServiceDatabase();
     if (dwError != ERROR_SUCCESS)
     {
@@ -401,11 +397,15 @@ wWinMain(HINSTANCE hInstance,
         goto done;
     }
 
-    /* Update service database */
+    /* Update the services database */
     ScmGetBootAndSystemDriverState();
 
-    /* Register service process with CSRSS */
-    RegisterServicesProcess(GetCurrentProcessId());
+    /* Register the Service Control Manager process with CSRSS */
+    if (!RegisterServicesProcess(GetCurrentProcessId()))
+    {
+        DPRINT1("SERVICES: Could not register SCM process\n");
+        goto done;
+    }
 
     /* Acquire the service start lock until autostart services have been started */
     dwError = ScmAcquireServiceStartLock(TRUE, &Lock);