From 346fbb32e109c20ed7367e92a4a72c52c1f077c0 Mon Sep 17 00:00:00 2001 From: Mikolaj Zalewski Date: Wed, 22 Aug 2007 18:08:29 -0700 Subject: [PATCH] advapi32: Return an error if we try to start an already running service. --- dlls/advapi32/service.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c index 458653c85fa..f922e626ec0 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 );