Rolf Kalbermatter : advapi32: Make SERVICE_STATUS_PROCESS match the declaration in MSDN and PSDK.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Apr 23 08:39:17 CDT 2007


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

Author: Rolf Kalbermatter <r.kalbermatter at hccnet.nl>
Date:   Sun Apr 22 22:26:47 2007 +0200

advapi32: Make SERVICE_STATUS_PROCESS match the declaration in MSDN and PSDK.

---

 dlls/advapi32/service.c |   28 ++++++++++++++--------------
 include/winsvc.h        |    8 +++++++-
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 34cb96a..3be5275 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -1580,7 +1580,7 @@ BOOL WINAPI QueryServiceStatus(SC_HANDLE hService,
 
     ret = QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, (LPBYTE)&SvcStatusData,
                                 sizeof(SERVICE_STATUS_PROCESS), NULL);
-    if (ret) *lpservicestatus = SvcStatusData.status;
+    if (ret) memcpy(lpservicestatus, &SvcStatusData, sizeof(SERVICE_STATUS)) ;
     return ret;
 }
 
@@ -1642,20 +1642,20 @@ BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel,
         return FALSE;
     }
 
-    /* FIXME: this would be the pid from service_start_process() */
-    pSvcStatusData->dwProcessId = 0;
-    /* service is running in a process that is not a system process */
-    pSvcStatusData->dwServiceFlags = 0;
-
     pipe = service_open_pipe(hsvc->name);
     if (pipe != INVALID_HANDLE_VALUE)
     {
-        r = service_get_status(pipe, &pSvcStatusData->status);
+        r = service_get_status(pipe, (LPSERVICE_STATUS)&pSvcStatusData);
         CloseHandle(pipe);
         if (r)
             return TRUE;
     }
 
+    /* FIXME: this would be the pid from service_start_process() */
+    pSvcStatusData->dwProcessId = 0;
+    /* service is running in a process that is not a system process */
+    pSvcStatusData->dwServiceFlags = 0;
+
     TRACE("Failed to read service status\n");
 
     /* read the service type from the registry */
@@ -1664,13 +1664,13 @@ BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel,
     if (r != ERROR_SUCCESS || type != REG_DWORD)
         val = 0;
 
-    pSvcStatusData->status.dwServiceType = val;
-    pSvcStatusData->status.dwCurrentState            = SERVICE_STOPPED;  /* stopped */
-    pSvcStatusData->status.dwControlsAccepted        = 0;
-    pSvcStatusData->status.dwWin32ExitCode           = ERROR_SERVICE_NEVER_STARTED;
-    pSvcStatusData->status.dwServiceSpecificExitCode = 0;
-    pSvcStatusData->status.dwCheckPoint              = 0;
-    pSvcStatusData->status.dwWaitHint                = 0;
+    pSvcStatusData->dwServiceType = val;
+    pSvcStatusData->dwCurrentState            = SERVICE_STOPPED;  /* stopped */
+    pSvcStatusData->dwControlsAccepted        = 0;
+    pSvcStatusData->dwWin32ExitCode           = ERROR_SERVICE_NEVER_STARTED;
+    pSvcStatusData->dwServiceSpecificExitCode = 0;
+    pSvcStatusData->dwCheckPoint              = 0;
+    pSvcStatusData->dwWaitHint                = 0;
 
     return TRUE;
 }
diff --git a/include/winsvc.h b/include/winsvc.h
index eeb9539..617b9f4 100644
--- a/include/winsvc.h
+++ b/include/winsvc.h
@@ -135,7 +135,13 @@ typedef struct _SERVICE_STATUS {
 
 typedef struct _SERVICE_STATUS_PROCESS
 {
-  SERVICE_STATUS status;
+  DWORD dwServiceType;
+  DWORD dwCurrentState;
+  DWORD dwControlsAccepted;
+  DWORD dwWin32ExitCode;
+  DWORD dwServiceSpecificExitCode;
+  DWORD dwCheckPoint;
+  DWORD dwWaitHint;
   DWORD dwProcessId;
   DWORD dwServiceFlags;
 } SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;




More information about the wine-cvs mailing list