estrutura SERVICE_TRIGGER (winsvc.h)

Representa um evento de gatilho de serviço. Essa estrutura é usada pela estrutura SERVICE_TRIGGER_INFO .

Sintaxe

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

Membros

dwTriggerType

O tipo de evento de gatilho. Esse membro pode ser um dos valores a seguir.

Valor Significado
SERVICE_TRIGGER_TYPE_CUSTOM
20
O evento é um evento personalizado gerado por um provedor ETW ( Rastreamento de Eventos para Windows ). Esse evento de gatilho pode ser usado para iniciar ou parar um serviço.

O membro pTriggerSubtype especifica o GUID do provedor de eventos.

O membro pDataItems especifica dados específicos do gatilho definidos pelo provedor.

SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL
1
O evento é disparado quando um dispositivo da classe de interface de dispositivo especificada chega ou está presente quando o sistema é iniciado. Esse evento de gatilho geralmente é usado para iniciar um serviço.

O membro pTriggerSubtype especifica o GUID da classe de interface do dispositivo. Esses GUIDs são definidos em arquivos de cabeçalho específicos do dispositivo fornecidos com o WDK ( Kit de Driver do Windows ).

O membro pDataItems especifica uma ou mais IDs de hardware e cadeias de caracteres de ID compatíveis para a classe de interface do dispositivo. As cadeias de caracteres devem ser Unicode. Se mais de uma cadeia de caracteres for especificada, o evento será disparado se qualquer uma das cadeias de caracteres corresponder. Por exemplo, o serviço Wpdbusenum é iniciado quando um dispositivo da classe de interface do dispositivo GUID_DEVINTERFACE_DISK {53f56307-b6bf-11d0-94f2-00a0c91efb8b} e uma cadeia de caracteres de ID de hardware de "USBSTOR\GenDisk" chega.

SERVICE_TRIGGER_TYPE_DOMAIN_JOIN
3
O evento é disparado quando o computador ingressa ou sai de um domínio. Esse evento de gatilho pode ser usado para iniciar ou parar um serviço.

O membro pTriggerSubtype especifica DOMAIN_JOIN_GUID ou DOMAIN_LEAVE_GUID.

O membro pDataItems não é usado.

SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT
4
O evento é disparado quando uma porta de firewall é aberta ou aproximadamente 60 segundos após o fechamento da porta do firewall. Esse evento de gatilho pode ser usado para iniciar ou parar um serviço.

O membro pTriggerSubtype especifica FIREWALL_PORT_OPEN_GUID ou FIREWALL_PORT_CLOSE_GUID.

O membro pDataItems especifica a porta, o protocolo e, opcionalmente, o caminho executável e as informações do usuário (nome ou cadeia de caracteres SID) do serviço que escuta no evento. O token "RPC" pode ser usado no lugar da porta para especificar qualquer soquete de escuta usado pelo RPC. O token "system" pode ser usado no lugar do caminho executável para especificar portas criadas por e escutadas pelo kernel do Windows.

O evento será disparado somente se todas as cadeias de caracteres corresponderem. Por exemplo, se MyService hospedado dentro de MyServiceProcess.exe for iniciado pelo gatilho quando a porta UDP 5001 for aberta, os dados específicos do gatilho serão a representação Unicode de "5001\0UDP\0%programfiles%\MyApplication\MyServiceProcess.exe\0MyService\0\0".

Nota Antes que esse evento possa ser registrado, o serviço BFE (Mecanismo de Filtragem Base) e todos os serviços que dependem dele devem ser interrompidos. Depois que o evento for registrado, o serviço BFE e os serviços que dependem dele poderão ser reiniciados. Para obter mais informações, consulte Comentários.
 
SERVICE_TRIGGER_TYPE_GROUP_POLICY
5
O evento é disparado quando ocorre uma alteração de política de computador ou política de usuário. Esse evento de gatilho geralmente é usado para iniciar um serviço.

O membro pTriggerSubtype especifica MACHINE_POLICY_PRESENT_GUID ou USER_POLICY_PRESENT_GUID.

O membro pDataItems não é usado.

SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY
2
O evento é disparado quando o primeiro endereço IP na pilha de rede TCP/IP fica disponível ou o último endereço IP na pilha fica indisponível. Esse evento de gatilho pode ser usado para iniciar ou parar um serviço.

O membro pTriggerSubtype especifica NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID ou NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID.

O membro pDataItems não é usado.

SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT
6
O evento é disparado quando um pacote ou solicitação chega em um protocolo de rede específico. Essa solicitação geralmente é usada para iniciar um serviço que parou após um tempo limite ocioso quando não há trabalho a ser feito.

Windows 7 e Windows Server 2008 R2: Esse tipo de gatilho não tem suporte até Windows 8 e Windows Server 2012.

O membro pTriggerSubtype especifica um dos seguintes valores: RPC_INTERFACE_EVENT_GUID ou NAMED_PIPE_EVENT_GUID.

O membro pDataItems especifica um GUID de ponto de extremidade ou interface. A cadeia de caracteres deve ser Unicode. O evento disparará se a cadeia de caracteres for uma correspondência exata.

O membro dwAction deve ser SERVICE_TRIGGER_ACTION_SERVICE_START.

dwAction

A ação a ser tomada quando o evento de gatilho especificado ocorrer. Esse membro pode ser um dos valores a seguir.

Valor Significado
SERVICE_TRIGGER_ACTION_SERVICE_START
1
Inicie o serviço quando o evento de gatilho especificado ocorrer.
SERVICE_TRIGGER_ACTION_SERVICE_STOP
2
Interrompa o serviço quando o evento de gatilho especificado ocorrer.

pTriggerSubtype

Aponta para um GUID que identifica o subtipo de evento de gatilho. O valor desse membro depende do valor do membro dwTriggerType .

Se dwTriggerType for SERVICE_TRIGGER_TYPE_CUSTOM, pTriggerSubtype será o GUID que identifica o provedor de eventos personalizado.

Se dwTriggerType for SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL, pTriggerSubtype será o GUID que identifica a classe de interface do dispositivo.

Se dwTriggerType for SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT, pTriggerSubtype será um dos valores a seguir.

Valor Significado
NAMED_PIPE_EVENT_GUID
1F81D131-3FAC-4537-9E0C-7E7B0C2F4B55
O evento é disparado quando uma solicitação é feita para abrir o pipe nomeado especificado por pDataItems. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT. O membro dwAction deve ser SERVICE_TRIGGER_ACTION_SERVICE_START.
RPC_INTERFACE_EVENT_GUID
BC90D167-9470-4139-A9BA-BE0BBBF5B74D
O evento é disparado quando uma solicitação de resolução de ponto de extremidade chega para o GUID da interface RPC especificado por pDataItems. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT. O membro dwAction deve ser SERVICE_TRIGGER_ACTION_SERVICE_START.
 

Para outros tipos de evento de gatilho, pTriggerSubType pode ser um dos valores a seguir.

Valor Significado
DOMAIN_JOIN_GUID
1ce20aba-9851-4421-9430-1ddeb766e809
O evento é disparado quando o computador ingressa em um domínio. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_DOMAIN_JOIN.
DOMAIN_LEAVE_GUID
ddaf516e-58c2-4866-9574-c3b615d42ea1
O evento é disparado quando o computador deixa um domínio. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_DOMAIN_JOIN.
FIREWALL_PORT_OPEN_GUID
b7569e07-8421-4ee0-ad10-86915afdad09
O evento é disparado quando a porta de firewall especificada é aberta. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT.
FIREWALL_PORT_CLOSE_GUID
a144ed38-8e12-4de4-9d96-e64740b1a524
O evento é disparado aproximadamente 60 segundos após o fechamento da porta de firewall especificada. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT.
MACHINE_POLICY_PRESENT_GUID
659FCAE6-5BDB-4DA9-B1FF-CA2A178D46E0
O evento é disparado quando a política do computador é alterada. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_GROUP_POLICY.
NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID
4f27f2de-14e2-430b-a549-7cd48cbc8245
O evento é disparado quando o primeiro endereço IP na pilha de rede TCP/IP fica disponível. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY.
NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID
cc4ba62a-162e-4648-847a-b6bdf993e335
O evento é disparado quando o último endereço IP na pilha de rede TCP/IP fica indisponível. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY.
USER_POLICY_PRESENT_GUID
54FB46C8-F089-464C-B1FD-59D1B62C3B50
O evento é disparado quando a política de usuário é alterada. O membro dwTriggerType deve ser SERVICE_TRIGGER_TYPE_GROUP_POLICY.

cDataItems

O número de estruturas SERVICE_TRIGGER_SPECIFIC_DATA_ITEM na matriz apontada por pDataItems.

Esse membro só será válido se o membro dwDataType for SERVICE_TRIGGER_TYPE_CUSTOM, SERVICE_TRIGGER_TYPE_DEVICE_ARRIVAL, SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT ou SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT.

pDataItems

Um ponteiro para uma matriz de estruturas SERVICE_TRIGGER_SPECIFIC_DATA_ITEM que contêm dados específicos do gatilho.

Comentários

Em um sistema ingressado em um domínio, as configurações de política de segurança podem impedir que o serviço BFE e seus serviços dependentes sejam interrompidos ou fazer com que eles sejam reiniciados automaticamente. Nesse caso, é necessário desabilitar os serviços e habilitá-los novamente depois que o evento for registrado. Para fazer isso programaticamente, armazene o tipo de início original de cada serviço, altere o tipo de início do serviço para SERVICE_DISABLED, registre o evento e restaure o tipo inicial original do serviço. Para obter informações sobre como alterar o tipo de início de um serviço, consulte ChangeServiceConfig.

Para desabilitar os serviços usando a ferramenta de linha de comando SC, use o comando sc config bfe start= desabilitado para desabilitar o serviço BFE e seus serviços dependentes e, em seguida, use o comando net stop bfe /Y para interrompê-los. Para reabilitar os serviços, use o comando sc config bfe start= auto. Para obter mais informações sobre a ferramenta de linha de comando sc, consulte Controlando um serviço usando SC.

Se não for possível desabilitar os serviços, talvez seja necessário reiniciar o sistema depois de instalar o serviço que está registrando o evento. Nesse caso, não desabilite o serviço BFE e seus serviços dependentes antes de reiniciar o sistema, pois o sistema poderá não funcionar corretamente se esses serviços permanecerem desabilitados.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Cabeçalho winsvc.h

Confira também

ChangeServiceConfig2

QueryServiceConfig2

SERVICE_TRIGGER_INFO

SERVICE_TRIGGER_SPECIFIC_DATA_ITEM

Eventos de gatilho de serviço