Example #1
0
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;
}