add stub for ControlServiceEx()
[reactos.git] / reactos / lib / advapi32 / service / scm.c
index 6adcdbc..5e91b2f 100644 (file)
@@ -12,7 +12,7 @@
 
 /* INCLUDES ******************************************************************/
 
-#include "advapi32.h"
+#include <advapi32.h>
 #include "svcctl_c.h"
 
 #define NDEBUG
@@ -139,21 +139,22 @@ CloseServiceHandle(SC_HANDLE hSCObject)
 {
   DWORD dwError;
 
-  DPRINT1("CloseServiceHandle() called\n");
+  DPRINT("CloseServiceHandle() called\n");
 
   HandleBind();
 
   /* Call to services.exe using RPC */
   dwError = ScmrCloseServiceHandle(BindingHandle,
                                    (unsigned int)hSCObject);
-  DPRINT1("dwError %lu\n", dwError);
-
   if (dwError)
   {
+    DPRINT1("ScmrCloseServiceHandle() failed (Error %lu)\n", dwError);
     SetLastError(dwError);
     return FALSE;
   }
 
+  DPRINT("CloseServiceHandle() done\n");
+
   return TRUE;
 }
 
@@ -168,11 +169,10 @@ ControlService(SC_HANDLE        hService,
                DWORD            dwControl,
                LPSERVICE_STATUS lpServiceStatus)
 {
-#if 0
   DWORD dwError;
 
-  DPRINT1("ControlService(%x, %x, %p)\n",
-          hService, dwControl, lpServiceStatus);
+  DPRINT("ControlService(%x, %x, %p)\n",
+         hService, dwControl, lpServiceStatus);
 
   HandleBind();
 
@@ -183,21 +183,36 @@ ControlService(SC_HANDLE        hService,
                                lpServiceStatus);
   if (dwError != ERROR_SUCCESS)
   {
+    DPRINT1("ScmrControlService() failed (Error %lu)\n", dwError);
     SetLastError(dwError);
     return FALSE;
   }
 
-  DPRINT1("ControlService() done\n");
+  DPRINT("ControlService() done\n");
 
   return TRUE;
-#endif
+}
 
-  DPRINT1("ControlService is unimplemented\n");
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return FALSE;
+
+/**********************************************************************
+ *  ControlServiceEx
+ *
+ * @unimplemented
+ */
+BOOL STDCALL
+ControlServiceEx(IN SC_HANDLE hService,
+                 IN DWORD dwControl,
+                 IN DWORD dwInfoLevel,
+                 IN OUT PVOID pControlParams)
+{
+    DPRINT1("ControlServiceEx(0x%p, 0x%x, 0x%x, 0x%p) UNIMPLEMENTED!\n",
+            hService, dwControl, dwInfoLevel, pControlParams);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return FALSE;
 }
 
 
+
 /**********************************************************************
  *  CreateServiceA
  *
@@ -262,7 +277,7 @@ DeleteService(SC_HANDLE hService)
 {
   DWORD dwError;
 
-  DPRINT1("DeleteService(%x)\n", hService);
+  DPRINT("DeleteService(%x)\n", hService);
 
   HandleBind();
 
@@ -271,6 +286,7 @@ DeleteService(SC_HANDLE hService)
                               (unsigned int)hService);
   if (dwError != ERROR_SUCCESS)
   {
+    DPRINT1("ScmrDeleteService() failed (Error %lu)\n", dwError);
     SetLastError(dwError);
     return FALSE;
   }
@@ -536,7 +552,7 @@ LockServiceDatabase(SC_HANDLE hSCManager)
                                     (unsigned int *)&hLock);
   if (dwError != ERROR_SUCCESS)
   {
-    DPRINT("ScmrLockServiceDatabase() failed (Error %lu)\n", dwError);
+    DPRINT1("ScmrLockServiceDatabase() failed (Error %lu)\n", dwError);
     SetLastError(dwError);
     return NULL;
   }
@@ -613,9 +629,9 @@ OpenSCManagerA(LPCSTR lpMachineName,
                                (LPSTR)lpDatabaseName,
                                dwDesiredAccess,
                                (unsigned int*)&hScm);
-  if (dwError)
+  if (dwError != ERROR_SUCCESS)
   {
-    DPRINT("ScmrOpenSCManagerA() failed (Error %lu)\n", dwError);
+    DPRINT1("ScmrOpenSCManagerA() failed (Error %lu)\n", dwError);
     SetLastError(dwError);
     return NULL;
   }
@@ -838,17 +854,31 @@ QueryServiceObjectSecurity(
 /**********************************************************************
  *  QueryServiceStatus
  *
- * @unimplemented
+ * @implemented
  */
-BOOL
-STDCALL
-QueryServiceStatus(
-    SC_HANDLE       hService,
-    LPSERVICE_STATUS    lpServiceStatus)
+BOOL STDCALL
+QueryServiceStatus(SC_HANDLE hService,
+                   LPSERVICE_STATUS lpServiceStatus)
 {
-    DPRINT1("QueryServiceStatus is unimplemented\n");
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  DWORD dwError;
+
+  DPRINT("QueryServiceStatus(%p, %p)\n",
+         hService, lpServiceStatus);
+
+  HandleBind();
+
+  /* Call to services.exe using RPC */
+  dwError = ScmrQueryServiceStatus(BindingHandle,
+                                   (unsigned int)hService,
+                                   lpServiceStatus);
+  if (dwError != ERROR_SUCCESS)
+  {
+    DPRINT1("ScmrQueryServiceStatus() failed (Error %lu)\n", dwError);
+    SetLastError(dwError);
     return FALSE;
+  }
+
+  return TRUE;
 }
 
 
@@ -889,8 +919,6 @@ StartServiceA(
 }
 
 
-
-
 /**********************************************************************
  *  StartServiceW
  *
@@ -919,7 +947,9 @@ UnlockServiceDatabase(SC_LOCK ScLock)
 {
   DWORD dwError;
 
+#if 0
   DPRINT("UnlockServiceDatabase(%x)\n", hSCManager);
+#endif
 
   HandleBind();
 
@@ -928,7 +958,7 @@ UnlockServiceDatabase(SC_LOCK ScLock)
                                       (unsigned int)ScLock);
   if (dwError != ERROR_SUCCESS)
   {
-    DPRINT("ScmrUnlockServiceDatabase() failed (Error %lu)\n", dwError);
+    DPRINT1("ScmrUnlockServiceDatabase() failed (Error %lu)\n", dwError);
     SetLastError(dwError);
     return FALSE;
   }
@@ -939,12 +969,12 @@ UnlockServiceDatabase(SC_LOCK ScLock)
 
 void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
 {
-  return GlobalAlloc(GPTR,len);
+  return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
 }
 
 void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
 {
-  GlobalFree(ptr);
+  HeapFree(GetProcessHeap(), 0, ptr);
 }
 
 /* EOF */