Rolf Kalbermatter : advapi32: Make QueryServiceStatus use QueryServiceStatusEx.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Apr 20 07:11:04 CDT 2007


Module: wine
Branch: master
Commit: 6c33eb4410d955ec9407b17c9f7353bca021ca4d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6c33eb4410d955ec9407b17c9f7353bca021ca4d

Author: Rolf Kalbermatter <r.kalbermatter at hccnet.nl>
Date:   Fri Apr 20 10:42:12 2007 +0200

advapi32: Make QueryServiceStatus use QueryServiceStatusEx.

---

 dlls/advapi32/service.c |   48 ++++++++--------------------------------------
 1 files changed, 9 insertions(+), 39 deletions(-)

diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 53ec9fc..34cb96a 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -1566,55 +1566,25 @@ BOOL WINAPI StartServiceW(SC_HANDLE hService, DWORD dwNumServiceArgs,
  * QueryServiceStatus [ADVAPI32.@]
  *
  * PARAMS
- *   hService        []
- *   lpservicestatus []
+ *   hService        [I] Handle to service to get information about
+ *   lpservicestatus [O] buffer to receive the status information for the service
  *
  */
 BOOL WINAPI QueryServiceStatus(SC_HANDLE hService,
                                LPSERVICE_STATUS lpservicestatus)
 {
-    struct sc_service *hsvc;
-    DWORD size, type, val;
-    HANDLE pipe;
-    LONG r;
+    SERVICE_STATUS_PROCESS SvcStatusData;
+    BOOL ret;
 
     TRACE("%p %p\n", hService, lpservicestatus);
 
-    hsvc = sc_handle_get_handle_data(hService, SC_HTYPE_SERVICE);
-    if (!hsvc)
-    {
-        SetLastError( ERROR_INVALID_HANDLE );
-        return FALSE;
-    }
-
-    pipe = service_open_pipe(hsvc->name);
-    if (pipe != INVALID_HANDLE_VALUE)
-    {
-        r = service_get_status(pipe, lpservicestatus);
-        CloseHandle(pipe);
-        if (r)
-            return TRUE;
-    }
-
-    TRACE("Failed to read service status\n");
-
-    /* read the service type from the registry */
-    size = sizeof(val);
-    r = RegQueryValueExA(hsvc->hkey, "Type", NULL, &type, (LPBYTE)&val, &size);
-    if(r!=ERROR_SUCCESS || type!=REG_DWORD)
-        val = 0;
-
-    lpservicestatus->dwServiceType = val;
-    lpservicestatus->dwCurrentState            = SERVICE_STOPPED;  /* stopped */
-    lpservicestatus->dwControlsAccepted        = 0;
-    lpservicestatus->dwWin32ExitCode           = ERROR_SERVICE_NEVER_STARTED;
-    lpservicestatus->dwServiceSpecificExitCode = 0;
-    lpservicestatus->dwCheckPoint              = 0;
-    lpservicestatus->dwWaitHint                = 0;
-
-    return TRUE;
+    ret = QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, (LPBYTE)&SvcStatusData,
+                                sizeof(SERVICE_STATUS_PROCESS), NULL);
+    if (ret) *lpservicestatus = SvcStatusData.status;
+    return ret;
 }
 
+
 /******************************************************************************
  * QueryServiceStatusEx [ADVAPI32.@]
  *




More information about the wine-cvs mailing list