- Move SetServiceObjectSecurity to the right file.
authorEric Kohl <eric.kohl@reactos.org>
Sun, 18 Dec 2005 21:38:05 +0000 (21:38 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 18 Dec 2005 21:38:05 +0000 (21:38 +0000)
- Pass arguments to ANSI services.

svn path=/trunk/; revision=20259

reactos/lib/advapi32/service/scm.c
reactos/lib/advapi32/service/sctrl.c

index dc0f137..9bb5ebb 100644 (file)
@@ -1222,6 +1222,21 @@ QueryServiceStatusEx(SC_HANDLE  hService,
 }
 
 
 }
 
 
+/**********************************************************************
+ *  SetServiceObjectSecurity
+ *
+ * @unimplemented
+ */
+BOOL STDCALL
+SetServiceObjectSecurity(SC_HANDLE hService,
+                        SECURITY_INFORMATION dwSecurityInformation,
+                        PSECURITY_DESCRIPTOR lpSecurityDescriptor)
+{
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return FALSE;
+}
+
+
 /**********************************************************************
  *  StartServiceA
  *
 /**********************************************************************
  *  StartServiceA
  *
index fa4a7ed..55604d1 100644 (file)
@@ -134,7 +134,54 @@ ScServiceMainStub(LPVOID Context)
     }
   else
     {
     }
   else
     {
-      (lpService->Main.lpFuncA)(0, NULL);
+      LPSTR *lpArgVector;
+      LPSTR Ptr;
+      LPSTR AnsiString;
+      DWORD AnsiLength;
+
+      AnsiLength = WideCharToMultiByte(CP_ACP,
+                                      0,
+                                      lpService->Arguments,
+                                      dwLength,
+                                      NULL,
+                                      0,
+                                      NULL,
+                                      NULL);
+      AnsiString = HeapAlloc(GetProcessHeap(),
+                            0,
+                            AnsiLength);
+      WideCharToMultiByte(CP_ACP,
+                         0,
+                         lpService->Arguments,
+                         dwLength,
+                         AnsiString,
+                         AnsiLength,
+                         NULL,
+                         NULL);
+
+      lpArgVector = HeapAlloc(GetProcessHeap(),
+                             0,
+                             (dwArgCount + 1) * sizeof(LPSTR));
+
+      dwArgCount = 0;
+      Ptr = AnsiString;
+      while (*Ptr)
+       {
+         lpArgVector[dwArgCount] = Ptr;
+
+         dwArgCount++;
+         Ptr += (strlen(Ptr) + 1);
+       }
+      lpArgVector[dwArgCount] = NULL;
+
+      (lpService->Main.lpFuncA)(dwArgCount, lpArgVector);
+
+      HeapFree(GetProcessHeap(),
+              0,
+              lpArgVector);
+      HeapFree(GetProcessHeap(),
+              0,
+              AnsiString);
     }
 
   return ERROR_SUCCESS;
     }
 
   return ERROR_SUCCESS;
@@ -255,7 +302,7 @@ ScServiceDispatcher(HANDLE hPipe,
                         NULL);
       if (bResult == FALSE)
         {
                         NULL);
       if (bResult == FALSE)
         {
-          DPRINT1("Pipe read failed\n");
+          DPRINT1("Pipe read failed (Error: %lu)\n", GetLastError());
           return FALSE;
         }
 
           return FALSE;
         }
 
@@ -407,21 +454,6 @@ SetServiceBits(SERVICE_STATUS_HANDLE hServiceStatus,
 }
 
 
 }
 
 
-/**********************************************************************
- *     SetServiceObjectSecurity
- *
- * @unimplemented
- */
-BOOL STDCALL
-SetServiceObjectSecurity(SC_HANDLE hService,
-                        SECURITY_INFORMATION dwSecurityInformation,
-                        PSECURITY_DESCRIPTOR lpSecurityDescriptor)
-{
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return FALSE;
-}
-
-
 /**********************************************************************
  *     SetServiceStatus
  *
 /**********************************************************************
  *     SetServiceStatus
  *