Prev Next
The SERVICE_STATUS structure contains information about a service. The ControlService,
EnumDependentServices, EnumServicesStatus,
and QueryServiceStatus functions
use this structure to return information about a service. A service uses this
structure in the SetServiceStatus
function to report its current status to the service control manager.
typedef struct _SERVICE_STATUS { // ss
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;
Members
-
dwServiceType
-
The value returned includes one of the following service type flags to
indicate the type of service. In addition, for a SERVICE_WIN32 service, the
SERVICE_INTERACTIVE_PROCESS flag might 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 Win32 service that runs in its own
process.
|
SERVICE_WIN32_SHARE_PROCESS
|
A service type flag that indicates a Win32 service that shares a process with
other services.
|
SERVICE_KERNEL_DRIVER
|
A service type flag that indicates a Windows NT device driver.
|
SERVICE_FILE_SYSTEM_DRIVER
|
A service type flag that indicates a Windows NT file system driver.
|
SERVICE_INTERACTIVE_PROCESS
|
A flag that indicates a Win32 service process 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. 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 enables the SERVICE_CONTROL_STOP value.
|
SERVICE_ACCEPT_PAUSE_CONTINUE
|
|
|
The service can be paused and continued. This enables the
SERVICE_CONTROL_PAUSE and SERVICE_CONTROL_CONTINUE values.
|
SERVICE_ACCEPT_SHUTDOWN
|
|
|
The service is notified when system shutdown occurs. This enables the system
to send a SERVICE_CONTROL_SHUTDOWN value to the service. The ControlService
function cannot send this control code.
|
-
dwWin32ExitCode
-
Specifies a 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 on normal termination.
-
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, 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, or continue operation pending.
-
dwWaitHint
-
Specifies an estimate of the amount of time, in milliseconds, that the service
expects a pending start, stop, or continue operation to take before 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.
See Also
ControlService, EnumDependentServices,
EnumServicesStatus, QueryServiceStatus,
SetServiceStatus