SERVICE_STATUS
The SERVICE_STATUS
structure contains information about a service. The ControlService
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