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.

Valor Significado
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
El servicio es un controlador del sistema de archivos.
SERVICE_KERNEL_DRIVER
0x00000001
El servicio es un controlador de dispositivo.
SERVICE_WIN32_OWN_PROCESS
0x00000010
El servicio se ejecuta en su propio proceso.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
El servicio comparte un proceso con otros servicios.
SERVICE_USER_OWN_PROCESS
0x00000050
El servicio se ejecuta en su propio proceso en la cuenta de usuario que ha iniciado sesión.
SERVICE_USER_SHARE_PROCESS
0x00000060
El servicio comparte un proceso con uno o varios servicios que se ejecutan en la cuenta de usuario que ha iniciado sesión.
 

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
SERVICE_INTERACTIVE_PROCESS
0x00000100
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.

Valor Significado
SERVICE_CONTINUE_PENDING
0x00000005
La continuación del servicio está pendiente.
SERVICE_PAUSE_PENDING
0x00000006
La pausa del servicio está pendiente.
SERVICE_PAUSED
0x00000007
El servicio está en pausa.
SERVICE_RUNNING
0x00000004
El servicio está ejecutándose.
SERVICE_START_PENDING
0x00000002
El servicio está iniciándose.
SERVICE_STOP_PENDING
0x00000003
El servicio está deteniéndose.
SERVICE_STOPPED
0x00000001
El servicio no está ejecutándose.

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
SERVICE_ACCEPT_NETBINDCHANGE
0x00000010
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 .

SERVICE_ACCEPT_PARAMCHANGE
0x00000008
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 .

SERVICE_ACCEPT_PAUSE_CONTINUE
0x00000002
El servicio se puede pausar y continuar.

Este código de control permite al servicio recibir SERVICE_CONTROL_PAUSE y SERVICE_CONTROL_CONTINUE notificaciones.

SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
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.

SERVICE_ACCEPT_SHUTDOWN
0x00000004
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.

SERVICE_ACCEPT_STOP
0x00000001
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).

Código de control Significado
SERVICE_ACCEPT_HARDWAREPROFILECHANGE
0x00000020
El servicio recibe una notificación cuando el perfil de hardware del equipo ha cambiado. Esto permite al sistema enviar notificaciones SERVICE_CONTROL_HARDWAREPROFILECHANGE al servicio.
SERVICE_ACCEPT_POWEREVENT
0x00000040
El servicio recibe una notificación cuando el estado de alimentación del equipo ha cambiado. Esto permite al sistema enviar notificaciones SERVICE_CONTROL_POWEREVENT al servicio.
SERVICE_ACCEPT_SESSIONCHANGE
0x00000080
El servicio recibe una notificación cuando el estado de sesión del equipo ha cambiado. Esto permite al sistema enviar SERVICE_CONTROL_SESSIONCHANGE notificaciones al servicio.
SERVICE_ACCEPT_TIMECHANGE
0x00000200
El servicio recibe una notificación cuando ha cambiado la hora del sistema. Esto permite al sistema enviar notificaciones SERVICE_CONTROL_TIMECHANGE al servicio.

Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este código de control no se admite.

SERVICE_ACCEPT_TRIGGEREVENT
0x00000400
Se notifica al servicio cuando se produce un evento para el que se ha registrado el servicio. Esto permite al sistema enviar notificaciones SERVICE_CONTROL_TRIGGEREVENT al servicio.

Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este código de control no se admite.

SERVICE_ACCEPT_USERMODEREBOOT
0x00000800
Los servicios se notifican cuando el usuario inicia un reinicio.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este código de control no se admite.

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)

Consulte también

ControlService

ControlServiceEx

EnumDependentServices

EnumServicesStatus

QueryServiceStatus

SetServiceStatus