int ServiceCommand::executeCommand(SC_HANDLE scm) { LOG.LogDebugFormat(L"Opening %s with %s rights...", mySettings->getServiceName(), (CString)mySCRight); SC_HANDLE svc = OpenService(scm, mySettings->getServiceName(), mySCRight); if (svc == NULL) { DWORD err = GetLastError(); CString msg = CreateFormatted(L"Failed to open service %s.", mySettings->getServiceName()); switch(err) { case ERROR_ACCESS_DENIED: LOG.LogWarnFormat(L"%s Access denied", msg); return 1; case ERROR_INVALID_NAME: LOG.LogWarnFormat(L"%s Invalid service name", msg); return 1; case ERROR_SERVICE_DOES_NOT_EXIST: LOG.LogWarnFormat(L"%s Service does not exist", msg); return 1; break; case ERROR_INVALID_HANDLE: default: LOG.LogWarnFormat(L"%s. %s", msg, LOG.GetErrorText(err)); return 1; break; } } int ret = executeCommand(scm, svc); CloseServiceHandle(svc); return ret; }