code: func (h *handler) handleWindowsRequests(ctx context.Context, requests <-chan svc.ChangeRequest, responses chan<- svc.Status) {
  	// Immediately tell Windows that we are pending service start.
  	responses <- svc.Status{State: svc.StartPending}
  	seelog.Info("Starting Windows service")
  
  	// TODO: Pre-start hooks go here (unclear if we need any yet)
  
  	// https://msdn.microsoft.com/en-us/library/windows/desktop/ms682108(v=vs.85).aspx
  	// Not sure if a better link exists to describe what these values mean
  	accepts := svc.AcceptStop | svc.AcceptShutdown
  
  	// Announce that we are running and we accept the above-mentioned commands
  	responses <- svc.Status{State: svc.Running, Accepts: accepts}
  
  	defer func() {
  		// Announce that we are stopping
  		seelog.Info("Stopping Windows service")
  		responses <- svc.Status{State: svc.StopPending}
  	}()
  
  	for {
  		select {
  		case <-ctx.Done():
  			return
  		case r := <-requests:
  			switch r.Cmd {
  			case svc.Interrogate:
  				// Our status doesn't change unless we are told to stop or shutdown
  				responses <- r.CurrentStatus
  			case svc.Stop, svc.Shutdown:
  				return
  			default:
  				continue
  			}
  		}
  	}
  }
docs: // handleWindowsRequests is a loop intended to run in a goroutine.  It handles bidirectional communication with the
  // Windows service manager.  This function works by pretty much immediately moving to running and then waiting for a
  // stop or shut down message from Windows or to be canceled (which could happen if the agent exits by itself and the
  // calling function cancels the context).