Platform SDK: DLLs, Processes, and Threads

SERVICE_STATUS_PROCESS

The SERVICE_STATUS_PROCESS structure contains information about a service. The EnumServicesStatusEx and QueryServiceStatusEx functions use this structure to return information about a service.

typedef struct _SERVICE_STATUS_PROCESS {
  DWORD  dwServiceType;
  DWORD  dwCurrentState;
  DWORD  dwControlsAccepted;
  DWORD  dwWin32ExitCode;
  DWORD  dwServiceSpecificExitCode;
  DWORD  dwCheckPoint;
  DWORD  dwWaitHint;
  DWORD  dwProcessId;
  DWORD  dwServiceFlags;
} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;

Members

dwServiceType
Includes one of the following values to indicate the type of service. In addition, for a SERVICE_WIN32 service, SERVICE_INTERACTIVE_PROCESS can be set, indicating that the service process can interact with the desktop.
Value Meaning
SERVICE_WIN32_OWN_PROCESS A service type flag that indicates a service that runs in its own process.
SERVICE_WIN32_SHARE_PROCESS A service type flag that indicates a service that shares a process with other services.
SERVICE_KERNEL_DRIVER A service type flag that indicates a device driver.
SERVICE_FILE_SYSTEM_DRIVER A service type flag that indicates a file system driver.
SERVICE_INTERACTIVE_PROCESS A flag that indicates a service that can interact with the desktop.

dwCurrentState
Indicates the current state of the service. One of the following values is specified.
Value Meaning
SERVICE_STOPPED The service is not running.
SERVICE_START_PENDING The service is starting.
SERVICE_STOP_PENDING The service is stopping.
SERVICE_RUNNING The service is running.
SERVICE_CONTINUE_PENDING The service continue is pending.
SERVICE_PAUSE_PENDING The service pause is pending.
SERVICE_PAUSED The service is paused.

dwControlsAccepted
Specifies the control codes that the service will accept and process in its Handler function. A user interface process can control a service by specifying a control command in the ControlService function. By default, all services accept the SERVICE_CONTROL_INTERROGATE value. Any or all of the following flags can be specified to enable the other control codes.
Value Meaning
SERVICE_ACCEPT_STOP The service can be stopped. This flag allows the service to receive the SERVICE_CONTROL_STOP value.
SERVICE_ACCEPT_PAUSE_CONTINUE The service can be paused and continued. This flag allows the service to receive the SERVICE_CONTROL_PAUSE and SERVICE_CONTROL_CONTINUE values.
SERVICE_ACCEPT_SHUTDOWN The service is notified when the system shuts down. This flag allows the service to receive the SERVICE_CONTROL_SHUTDOWN value.

Note that ControlService cannot send this control code; only the system can send SERVICE_CONTROL_SHUTDOWN.

SERVICE_ACCEPT_PARAMCHANGE The service can reread its startup parameters without being stopped and restarted. This enables the system to send a SERVICE_CONTROL_PARAMCHANGE value to the service.
SERVICE_ACCEPT_NETBINDCHANGE The service is a network component that can accept changes in its binding without being stopped and restarted. This enables the system to send the SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE, SERVICE_CONTROL_NETBINDENABLE, and SERVICE_CONTROL_NETBINDDISABLE values to the service.
SERVICE_ACCEPT_HARDWAREPROFILECHANGE The service is notified when the computer's hardware profile has changed. This enables the system to send a SERVICE_CONTROL_HARDWAREPROFILECHANGE value to the service. The service receives this value only if it has called the RegisterServiceCtrlHandlerEx function. The ControlService function cannot send this control code.
SERVICE_ACCEPT_POWER_EVENT The service is notified when the computer's power status has changed. This enables the system to send a SERVICE_CONTROL_POWER_EVENT value to the service. The service receives this value only if it has called the RegisterServiceCtrlHandlerEx function. The ControlService function cannot send this control code.

dwWin32ExitCode
Specifies an Win32 error code that the service uses to report an error that occurs when it is starting or stopping. To return an error code specific to the service, the service must set this value to ERROR_SERVICE_SPECIFIC_ERROR to indicate that the dwServiceSpecificExitCode member contains the error code. The service should set this value to NO_ERROR when it is running and when it terminates normally.
dwServiceSpecificExitCode
Specifies a service-specific error code that the service returns when an error occurs while the service is starting or stopping. This value is ignored unless the dwWin32ExitCode member is set to ERROR_SERVICE_SPECIFIC_ERROR.
dwCheckPoint
Specifies a value that the service increments periodically to report its progress during a lengthy start, stop, pause, or continue operation. For example, the service should increment this value as it completes each step of its initialization when it is starting up. The user interface program that invoked the operation on the service uses this value to track the progress of the service during a lengthy operation. This value is not valid and should be zero when the service does not have a start, stop, pause, or continue operation pending.
dwWaitHint
Specifies the estimated time required, in milliseconds, for a pending start, stop, pause, or continue operation. After the specified amount of time has elapsed, the service makes its next call to the SetServiceStatus function with either an incremented dwCheckPoint value or a change in dwCurrentState. If the amount of time specified by dwWaitHint passes, and dwCheckPoint has not been incremented, or dwCurrentState has not changed, the service control manager or service control program can assume that an error has occurred.
dwProcessId
Specifies the process identifier of the service.
dwServiceFlags
Specifies the service flags. This parameter can be either of the following values.
Value Meaning
0 The service is running in a process that is not a system process, or it is not running.

If the service is running in a process that is not a system process, dwProcessId is nonzero. If the service is not running, dwProcessId is zero.

SERVICE_RUNS_IN_SYSTEM_PROCESS The service runs in a system process that must always be running.

Requirements

  Windows NT/2000: Requires Windows 2000.
  Header: Declared in Winsvc.h; include Windows.h.

See Also

Services Overview, Service Structures, EnumServicesStatusEx, QueryServiceStatusEx