- Implement RCreateServiceA.
[reactos.git] / reactos / dll / win32 / advapi32 / service / sctrl.c
index b78a4a0..3094951 100644 (file)
@@ -237,7 +237,7 @@ ScConnectControlPipe(HANDLE *hPipe)
                          NULL);
     if (*hPipe == INVALID_HANDLE_VALUE)
     {
-        ERR("CreateFileW() failed (Error %lu)\n", GetLastError());
+        ERR("CreateFileW() failed for pipe %S (Error %lu)\n", NtControlPipeName, GetLastError());
         return ERROR_FAILED_SERVICE_CONTROLLER_CONNECT;
     }
 
@@ -274,7 +274,7 @@ ScStartService(PSCM_CONTROL_PACKET ControlPacket)
     TRACE("Size: %lu\n", ControlPacket->dwSize);
     TRACE("Service: %S\n", &ControlPacket->szArguments[0]);
 
-    lpService = (PACTIVE_SERVICE)(ULONG_PTR)ControlPacket->hClient;
+    lpService = (PACTIVE_SERVICE)ControlPacket->hClient;
     if (lpService == NULL)
     {
         TRACE("Service not found\n");
@@ -317,7 +317,7 @@ ScControlService(PSCM_CONTROL_PACKET ControlPacket)
     TRACE("Size: %lu\n", ControlPacket->dwSize);
     TRACE("Service: %S\n", &ControlPacket->szArguments[0]);
 
-    lpService = (PACTIVE_SERVICE)(ULONG_PTR)ControlPacket->hClient;
+    lpService = (PACTIVE_SERVICE)ControlPacket->hClient;
     if (lpService == NULL)
     {
         TRACE("Service not found\n");
@@ -395,7 +395,8 @@ ScServiceDispatcher(HANDLE hPipe,
                 break;
 
             default:
-                TRACE("Unknown command %lu", ControlPacket->dwControl);
+                TRACE("Command %lu received", ControlPacket->dwControl);
+                ScControlService(ControlPacket);
                 continue;
         }
 
@@ -454,7 +455,7 @@ RegisterServiceCtrlHandlerW(LPCWSTR lpServiceName,
     Service = ScLookupServiceByServiceName((LPWSTR)lpServiceName);
     if (Service == NULL)
     {
-        return INVALID_HANDLE_VALUE;
+        return (SERVICE_STATUS_HANDLE)NULL;
     }
 
     Service->HandlerFunction = lpHandlerProc;
@@ -519,7 +520,7 @@ RegisterServiceCtrlHandlerExW(LPCWSTR lpServiceName,
     Service->HandlerFunctionEx = lpHandlerProc;
     Service->HandlerContext = lpContext;
 
-    TRACE("RegisterServiceCtrlHandlerEx returning %lu", Service->hService);
+    TRACE("RegisterServiceCtrlHandlerEx returning %lu\n", Service->hService);
 
     return (SERVICE_STATUS_HANDLE)Service->hService;
 }
@@ -541,7 +542,7 @@ I_ScSetServiceBitsA(SERVICE_STATUS_HANDLE hServiceStatus,
 {
     BOOL bResult;
 
-    _SEH2_TRY
+    RpcTryExcept
     {
         /* Call to services.exe using RPC */
         bResult = RI_ScSetServiceBitsA((RPC_SERVICE_STATUS_HANDLE)hServiceStatus,
@@ -550,12 +551,12 @@ I_ScSetServiceBitsA(SERVICE_STATUS_HANDLE hServiceStatus,
                                        bUpdateImmediately,
                                        lpString);
     }
-    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
     {
         SetLastError(ScmRpcStatusToWinError(RpcExceptionCode()));
         bResult = FALSE;
     }
-    _SEH2_END;
+    RpcEndExcept;
 
     return bResult;
 }
@@ -577,7 +578,7 @@ I_ScSetServiceBitsW(SERVICE_STATUS_HANDLE hServiceStatus,
 {
     BOOL bResult;
 
-    _SEH2_TRY
+    RpcTryExcept
     {
         /* Call to services.exe using RPC */
         bResult = RI_ScSetServiceBitsW((RPC_SERVICE_STATUS_HANDLE)hServiceStatus,
@@ -586,12 +587,12 @@ I_ScSetServiceBitsW(SERVICE_STATUS_HANDLE hServiceStatus,
                                        bUpdateImmediately,
                                        lpString);
     }
-    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
     {
         SetLastError(ScmRpcStatusToWinError(RpcExceptionCode()));
         bResult = FALSE;
     }
-    _SEH2_END;
+    RpcEndExcept;
 
     return bResult;
 }
@@ -652,7 +653,7 @@ SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus,
  * @implemented
  */
 BOOL WINAPI
-StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA lpServiceStartTable)
+StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA * lpServiceStartTable)
 {
     ULONG i;
     HANDLE hPipe;
@@ -742,7 +743,7 @@ StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA lpServiceStartTable)
  * @implemented
  */
 BOOL WINAPI
-StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW lpServiceStartTable)
+StartServiceCtrlDispatcherW(const SERVICE_TABLE_ENTRYW * lpServiceStartTable)
 {
     ULONG i;
     HANDLE hPipe;