To send control requests to a running service, a service control program uses the ControlService function. This function specifies a control value that is passed to the Handler function of the specified service. This control value can be a user-defined code, or it can be one of the standard codes that enable the calling program to perform the following actions:
·Stop a service (SERVICE_CONTROL_STOP).
·Pause a service (SERVICE_CONTROL_PAUSE).
·Resume executing a paused service (SERVICE_CONTROL_CONTINUE).
·Retrieve updated status information from a service (SERVICE_CONTROL_INTERROGATE).
For more information, see Sending Control Requests to a Service.
Each service specifies the control values that it will accept and process. To determine which of the standard control values are accepted by a service, use the QueryServiceStatus function or specify the SERVICE_CONTROL_INTERROGATE control value in a call to the ControlService function. The dwControlsAccepted member of the SERVICE_STATUS structure returned by these functions indicates whether the service can be stopped, paused, or resumed. All services accept the SERVICE_CONTROL_INTERROGATE control value.
Note The QueryServiceStatus function reports the most recent status for a specified service, but does not get an updated status from the service itself. Using the SERVICE_CONTROL_INTERROGATE control value in a call to ControlService ensures that the status information returned is current.