Module: wine Branch: master Commit: 346fbb32e109c20ed7367e92a4a72c52c1f077c0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=346fbb32e109c20ed7367e92a4...
Author: Mikolaj Zalewski mikolajz@google.com Date: Wed Aug 22 18:08:29 2007 -0700
advapi32: Return an error if we try to start an already running service.
---
dlls/advapi32/service.c | 21 ++++++++++++++++----- 1 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c index 458653c..f922e62 100644 --- a/dlls/advapi32/service.c +++ b/dlls/advapi32/service.c @@ -454,7 +454,8 @@ static BOOL service_handle_start(HANDLE pipe, service_data *service, DWORD count
if (service->thread) { - ERR("service is not stopped\n"); + WARN("service is not stopped\n"); + result = ERROR_SERVICE_ALREADY_RUNNING; goto end; }
@@ -503,7 +504,14 @@ static BOOL service_send_start_message(HANDLE pipe, LPCWSTR *argv, DWORD argc)
r = WriteFile(pipe, ssi, sizeof *ssi + len*sizeof(WCHAR), &count, NULL); if (r) + { r = ReadFile(pipe, &result, sizeof result, &count, NULL); + if (r && result) + { + SetLastError(result); + r = FALSE; + } + }
HeapFree(GetProcessHeap(),0,ssi);
@@ -1764,11 +1772,14 @@ BOOL WINAPI StartServiceW(SC_HANDLE hService, DWORD dwNumServiceArgs, CloseHandle(handle); }
- handle = service_open_pipe(hsvc->name); - if (handle != INVALID_HANDLE_VALUE) + if (r) { - service_set_processID(handle, dwProcessId, &dwResult); - CloseHandle(handle); + handle = service_open_pipe(hsvc->name); + if (handle != INVALID_HANDLE_VALUE) + { + service_set_processID(handle, dwProcessId, &dwResult); + CloseHandle(handle); + } }
UnlockServiceDatabase( hLock );