estructura de SERVICE_TRIGGER (winsvc.h)

Representa un evento de desencadenador de servicio. Esta estructura la usa la estructura SERVICE_TRIGGER_INFO .

Sintaxis

typedef struct _SERVICE_TRIGGER {
  DWORD                               dwTriggerType;
  DWORD                               dwAction;
  GUID                                *pTriggerSubtype;
  DWORD                               cDataItems;
  PSERVICE_TRIGGER_SPECIFIC_DATA_ITEM pDataItems;
} SERVICE_TRIGGER, *PSERVICE_TRIGGER;

Miembros

dwTriggerType

Tipo de evento de desencadenador. Este miembro puede ser uno de los siguientes valores.

Valor Significado
SERVICE_TRIGGER_TYPE_CUSTOM
20
El evento es un evento personalizado generado por un proveedor de Seguimiento de eventos para Windows (ETW). Este evento de desencadenador se puede usar para iniciar o detener un servicio.

El miembro pTriggerSubtype especifica el GUID del proveedor de eventos.

El miembro pDataItems especifica los datos específicos del desencadenador definidos por el proveedor.

SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL
1
El evento se desencadena cuando llega un dispositivo de la clase de interfaz de dispositivo especificada o está presente cuando se inicia el sistema. Este evento de desencadenador se usa normalmente para iniciar un servicio.

El miembro pTriggerSubtype especifica el GUID de clase de interfaz de dispositivo. Estos GUID se definen en archivos de encabezado específicos del dispositivo proporcionados con el Kit de controladores de Windows (WDK).

El miembro pDataItems especifica una o varias cadenas de identificador de hardware y identificador compatibles para la clase de interfaz de dispositivo. Las cadenas deben ser Unicode. Si se especifica más de una cadena, el evento se desencadena si alguna de las cadenas coincide. Por ejemplo, el servicio Wpdbusenum se inicia cuando un dispositivo de la clase de interfaz de dispositivo GUID_DEVINTERFACE_DISK {53f56307-b6bf-11d0-94f2-00a0c91efb8b} y una cadena de identificador de hardware de "USBSTOR\GenDisk" llega.

SERVICE_TRIGGER_TYPE_DOMAIN_JOIN
3
El evento se desencadena cuando el equipo se une o sale de un dominio. Este evento de desencadenador se puede usar para iniciar o detener un servicio.

El miembro pTriggerSubtype especifica DOMAIN_JOIN_GUID o DOMAIN_LEAVE_GUID.

No se usa el miembro pDataItems .

SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT
4
El evento se desencadena cuando se abre un puerto de firewall o aproximadamente 60 segundos después de cerrar el puerto de firewall. Este evento de desencadenador se puede usar para iniciar o detener un servicio.

El miembro pTriggerSubtype especifica FIREWALL_PORT_OPEN_GUID o FIREWALL_PORT_CLOSE_GUID.

El miembro pDataItems especifica el puerto, el protocolo y, opcionalmente, la ruta de acceso ejecutable y la información del usuario (cadena o nombre de SID) del servicio que escucha en el evento. El token "RPC" se puede usar en lugar del puerto para especificar cualquier socket de escucha usado por RPC. El token "system" se puede usar en lugar de la ruta de acceso ejecutable para especificar puertos creados por el kernel de Windows y escuchados en él.

El evento solo se desencadena si todas las cadenas coinciden. Por ejemplo, si MyService hospedado dentro de MyServiceProcess.exe se iniciará el desencadenador cuando se abra el puerto UDP 5001, los datos específicos del desencadenador serían la representación Unicode de "5001\0UDP\0%programfiles%\MyApplication\MyServiceProcess.exe\0MyService\0\0".

Nota Para poder registrar este evento, se debe detener el servicio Motor de filtrado base (BFE) y todos los servicios que dependen de él. Una vez registrado el evento, se pueden reiniciar el servicio BFE y los servicios que dependen de él. Para obtener más información, vea la sección Comentarios.
 
SERVICE_TRIGGER_TYPE_GROUP_POLICY
5
El evento se desencadena cuando se produce un cambio de directiva de equipo o directiva de usuario. Este evento de desencadenador se usa normalmente para iniciar un servicio.

El miembro pTriggerSubtype especifica MACHINE_POLICY_PRESENT_GUID o USER_POLICY_PRESENT_GUID.

No se usa el miembro pDataItems .

SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY
2
El evento se desencadena cuando la primera dirección IP de la pila de redes TCP/IP está disponible o la última dirección IP de la pila deja de estar disponible. Este evento de desencadenador se puede usar para iniciar o detener un servicio.

El miembro pTriggerSubtype especifica NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID o NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID.

No se usa el miembro pDataItems .

SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT
6
El evento se desencadena cuando llega un paquete o solicitud a un protocolo de red determinado. Esta solicitud se usa normalmente para iniciar un servicio que se ha detenido después de un tiempo de espera de inactividad cuando no hay trabajo que hacer.

Windows 7 y Windows Server 2008 R2: Este tipo de desencadenador no se admite hasta Windows 8 y Windows Server 2012.

El miembro pTriggerSubtype especifica uno de los siguientes valores: RPC_INTERFACE_EVENT_GUID o NAMED_PIPE_EVENT_GUID.

El miembro pDataItems especifica un GUID de punto de conexión o interfaz. La cadena debe ser Unicode. El evento se desencadena si la cadena es una coincidencia exacta.

El miembro dwAction debe ser SERVICE_TRIGGER_ACTION_SERVICE_START.

dwAction

Acción que se va a realizar cuando se produce el evento de desencadenador especificado. Este miembro puede ser uno de los siguientes valores.

Valor Significado
SERVICE_TRIGGER_ACTION_SERVICE_START
1
Inicie el servicio cuando se produzca el evento de desencadenador especificado.
SERVICE_TRIGGER_ACTION_SERVICE_STOP
2
Detenga el servicio cuando se produzca el evento de desencadenador especificado.

pTriggerSubtype

Apunta a un GUID que identifica el subtipo de evento de desencadenador. El valor de este miembro depende del valor del miembro dwTriggerType .

Si dwTriggerType es SERVICE_TRIGGER_TYPE_CUSTOM, pTriggerSubtype es el GUID que identifica el proveedor de eventos personalizado.

Si dwTriggerType es SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL, pTriggerSubtype es el GUID que identifica la clase de interfaz de dispositivo.

Si dwTriggerType es SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT, pTriggerSubtype es uno de los valores siguientes.

Valor Significado
NAMED_PIPE_EVENT_GUID
1F81D131-3FAC-4537-9E0C-7E7B0C2F4B55
El evento se desencadena cuando se realiza una solicitud para abrir la canalización con nombre especificada por pDataItems. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT. El miembro dwAction debe ser SERVICE_TRIGGER_ACTION_SERVICE_START.
RPC_INTERFACE_EVENT_GUID
BC90D167-9470-4139-A9BA-BE0BBBF5B74D
El evento se desencadena cuando llega una solicitud de resolución de punto de conexión para el GUID de la interfaz RPC especificado por pDataItems. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT. El miembro dwAction debe ser SERVICE_TRIGGER_ACTION_SERVICE_START.
 

Para otros tipos de eventos de desencadenador, pTriggerSubType puede ser uno de los siguientes valores.

Valor Significado
DOMAIN_JOIN_GUID
1ce20aba-9851-4421-9430-1ddeb766e809
El evento se desencadena cuando el equipo se une a un dominio. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_DOMAIN_JOIN.
DOMAIN_LEAVE_GUID
ddaf516e-58c2-4866-9574-c3b615d42ea1
El evento se desencadena cuando el equipo sale de un dominio. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_DOMAIN_JOIN.
FIREWALL_PORT_OPEN_GUID
b7569e07-8421-4ee0-ad10-86915afdad09
El evento se desencadena cuando se abre el puerto de firewall especificado. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT.
FIREWALL_PORT_CLOSE_GUID
a144ed38-8e12-4de4-9d96-e64740b1a524
El evento se desencadena aproximadamente 60 segundos después de cerrar el puerto de firewall especificado. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT.
MACHINE_POLICY_PRESENT_GUID
659FCAE6-5BDB-4DA9-B1FF-CA2A178D46E0
El evento se desencadena cuando la directiva de máquina ha cambiado. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_GROUP_POLICY.
NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID
4f27f2de-14e2-430b-a549-7cd48cbc8245
El evento se desencadena cuando la primera dirección IP de la pila de redes TCP/IP está disponible. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY.
NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID
cc4ba62a-162e-4648-847a-b6bdf993e335
El evento se desencadena cuando la última dirección IP de la pila de redes TCP/IP deja de estar disponible. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY.
USER_POLICY_PRESENT_GUID
54FB46C8-F089-464C-B1FD-59D1B62C3B50
El evento se desencadena cuando la directiva de usuario ha cambiado. El miembro dwTriggerType debe ser SERVICE_TRIGGER_TYPE_GROUP_POLICY.

cDataItems

Número de estructuras de SERVICE_TRIGGER_SPECIFIC_DATA_ITEM en la matriz a la que apunta pDataItems.

Este miembro solo es válido si el miembro dwDataType es SERVICE_TRIGGER_TYPE_CUSTOM, SERVICE_TRIGGER_TYPE_DEVICE_ARRIVAL, SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT o SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT.

pDataItems

Puntero a una matriz de estructuras de SERVICE_TRIGGER_SPECIFIC_DATA_ITEM que contienen datos específicos del desencadenador.

Comentarios

En un sistema unido a un dominio, la configuración de directivas de seguridad puede impedir que el servicio BFE y sus servicios dependientes se detengan o que se reinicien automáticamente. En este caso, es necesario deshabilitar los servicios y volver a habilitarlos después de registrar el evento. Para ello mediante programación, almacene el tipo de inicio original de cada servicio, cambie el tipo de inicio del servicio a SERVICE_DISABLED, registre el evento y, a continuación, restaure el tipo de inicio original del servicio. Para obtener información sobre cómo cambiar el tipo de inicio de un servicio, vea ChangeServiceConfig.

Para deshabilitar los servicios mediante la herramienta de línea de comandos SC, use el comando sc config bfe start= deshabilitado para deshabilitar el servicio BFE y sus servicios dependientes, use el comando net stop bfe /Y para detenerlos. Para volver a habilitar los servicios, use el comando sc config bfe start= auto. Para obtener más información sobre la herramienta de línea de comandos SC, consulte Control de un servicio mediante SC.

Si no es posible deshabilitar los servicios, puede ser necesario reiniciar el sistema después de instalar el servicio que registra el evento. En este caso, no deshabilite el servicio BFE y sus servicios dependientes antes de reiniciar el sistema, ya que es posible que el sistema no funcione correctamente si estos servicios permanecen deshabilitados.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Encabezado winsvc.h

Consulte también

ChangeServiceConfig2

QueryServiceConfig2

SERVICE_TRIGGER_INFO

SERVICE_TRIGGER_SPECIFIC_DATA_ITEM

Eventos de desencadenador de servicio