SERVICE_STATUS estructura (winsvc.h)
Contiene información de estado para un servicio. Las funciones ControlService, EnumDependentServices, EnumServicesStatus y QueryServiceStatus usan esta estructura. Un servicio usa esta estructura en la función SetServiceStatus para notificar su estado actual al administrador de controles de servicio.
Sintaxis
typedef struct _SERVICE_STATUS {
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;
Miembros
dwServiceType
Tipo de servicio. Este miembro puede ser uno de los siguientes valores.
Si el tipo de servicio es SERVICE_WIN32_OWN_PROCESS o SERVICE_WIN32_SHARE_PROCESS, y el servicio se ejecuta en el contexto de la cuenta LocalSystem, también se puede especificar el tipo siguiente.
Valor | Significado |
---|---|
|
El servicio puede interactuar con el escritorio.
Para obtener más información, consulte Interactive Services. |
dwCurrentState
Estado actual del servicio. Este miembro puede ser uno de los siguientes valores.
dwControlsAccepted
Los códigos de control que el servicio acepta y procesa en su función de controlador (consulte Handler y HandlerEx). Un proceso de interfaz de usuario puede controlar un servicio especificando un comando de control en la función ControlService o ControlServiceEx . De forma predeterminada, todos los servicios aceptan el valor de SERVICE_CONTROL_INTERROGATE .
Para aceptar el valor de SERVICE_CONTROL_DEVICEEVENT , el servicio debe registrarse para recibir eventos de dispositivo mediante la función RegisterDeviceNotification .
A continuación se muestran los códigos de control.
Código de control | Significado |
---|---|
|
El servicio es un componente de red que puede aceptar cambios en su enlace sin que se detenga y reinicie.
Este código de control permite que el servicio reciba notificaciones SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE, SERVICE_CONTROL_NETBINDENABLE y SERVICE_CONTROL_NETBINDDISABLE . |
|
El servicio puede volver a leer sus parámetros de inicio sin que se detenga y reinicie.
Este código de control permite que el servicio reciba notificaciones SERVICE_CONTROL_PARAMCHANGE . |
|
El servicio se puede pausar y continuar.
Este código de control permite al servicio recibir SERVICE_CONTROL_PAUSE y SERVICE_CONTROL_CONTINUE notificaciones. |
|
El servicio puede realizar tareas previas.
Este código de control permite al servicio recibir notificaciones SERVICE_CONTROL_PRESHUTDOWN . Tenga en cuenta que ControlService y ControlServiceEx no pueden enviar esta notificación; solo el sistema puede enviarlo. Windows Server 2003 y Windows XP: Este valor no se admite. |
|
Se notifica al servicio cuando se produce el apagado del sistema.
Este código de control permite al servicio recibir notificaciones SERVICE_CONTROL_SHUTDOWN . Tenga en cuenta que ControlService y ControlServiceEx no pueden enviar esta notificación; solo el sistema puede enviarlo. |
|
El servicio se puede detener.
Este código de control permite al servicio recibir notificaciones SERVICE_CONTROL_STOP . |
Este miembro también puede contener los siguientes códigos de control extendidos, que solo son compatibles con HandlerEx. (Tenga en cuenta que controlService o ControlServiceEx no pueden enviar estos códigos de control).
dwWin32ExitCode
El código de error que usa el servicio para notificar un error que se produce cuando se inicia o se detiene. Para devolver un código de error específico del servicio, el servicio debe establecer este valor en ERROR_SERVICE_SPECIFIC_ERROR para indicar que el miembro dwServiceSpecificExitCode contiene el código de error. El servicio debe establecer este valor en NO_ERROR cuando se ejecuta y en la terminación normal.
dwServiceSpecificExitCode
Código de error específico del servicio que devuelve el servicio cuando se produce un error mientras el servicio se inicia o se detiene. Este valor se omite a menos que el miembro dwWin32ExitCode esté establecido en ERROR_SERVICE_SPECIFIC_ERROR.
dwCheckPoint
Valor de punto de comprobación que el servicio incrementa periódicamente para informar de su progreso durante una larga operación de inicio, detención, pausa o continuación. Por ejemplo, el servicio debe incrementar este valor, ya que completa cada paso de su inicialización cuando se inicia. El programa de interfaz de usuario que invocó la operación en el servicio usa este valor para realizar un seguimiento del progreso del servicio durante una operación prolongada. Este valor no es válido y debe ser cero cuando el servicio no tiene una operación de inicio, detención, pausa o continuación pendiente.
dwWaitHint
Tiempo estimado necesario para una operación de inicio, detención, pausa o continuación pendientes, en milisegundos. Antes de que haya transcurrido el tiempo especificado, el servicio debe realizar su siguiente llamada a la función SetServiceStatus con un valor dwCheckPoint incrementado o un cambio en dwCurrentState. Si la cantidad de tiempo especificada por dwWaitHint pasa, y dwCheckPoint no se ha incrementado o dwCurrentState no ha cambiado, el administrador de control de servicio o el programa de control de servicio pueden suponer que se ha producido un error y que el servicio debe detenerse. Sin embargo, si el servicio comparte un proceso con otros servicios, el administrador de control de servicios no puede finalizar la aplicación de servicio porque tendría que terminar también los demás servicios que comparten el proceso.
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado | winsvc.h (incluye Windows.h) |