Поделиться через


структура SERVICE_TRIGGER (winsvc.h)

Представляет событие триггера службы. Эта структура используется структурой SERVICE_TRIGGER_INFO .

Синтаксис

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

Члены

dwTriggerType

Тип события триггера. Этот элемент может быть одним из следующих значений.

Значение Значение
SERVICE_TRIGGER_TYPE_CUSTOM
20
Событие является пользовательским событием, созданным поставщиком трассировки событий Windows (ETW). Это событие триггера можно использовать для запуска или остановки службы.

Член pTriggerSubtype указывает GUID поставщика событий.

Член pDataItems указывает данные, относящиеся к триггеру, определенные поставщиком.

SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL
1
Событие активируется при поступлении устройства указанного класса интерфейса устройства или при запуске системы. Это событие триггера обычно используется для запуска службы.

Член pTriggerSubtype указывает GUID класса интерфейса устройства. Эти идентификаторы GUID определяются в файлах заголовков для конкретного устройства, которые предоставляются вместе с пакетом драйверов Windows (WDK).

Элемент pDataItems указывает один или несколько идентификаторов оборудования и совместимые строки идентификатора для класса интерфейса устройства. Строки должны быть в Юникоде. Если указано несколько строк, событие активируется, если какая-либо из строк совпадает. Например, служба Wpdbusenum запускается при поступлении устройства класса интерфейса устройства GUID_DEVINTERFACE_DISK {53f56307-b6bf-11d0-94f2-00a0c91efb8b} и строки идентификатора "USBSTOR\GenDisk" оборудования.

SERVICE_TRIGGER_TYPE_DOMAIN_JOIN
3
Событие активируется, когда компьютер присоединяется к домену или покидает его. Это событие триггера можно использовать для запуска или остановки службы.

Элемент pTriggerSubtype указывает DOMAIN_JOIN_GUID или DOMAIN_LEAVE_GUID.

Элемент pDataItems не используется.

SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT
4
Событие активируется при открытии порта брандмауэра или примерно через 60 секунд после закрытия порта брандмауэра. Это событие триггера можно использовать для запуска или остановки службы.

Элемент pTriggerSubtype указывает FIREWALL_PORT_OPEN_GUID или FIREWALL_PORT_CLOSE_GUID.

Член pDataItems указывает порт, протокол и при необходимости путь к исполняемому файлу и сведения о пользователе (строка идентификатора безопасности или имя) службы, прослушивающей событие. Маркер RPC можно использовать вместо порта, чтобы указать любой сокет прослушивания, используемый RPC. Вместо пути к исполняемому файлу можно использовать системный токен, чтобы указать порты, созданные ядром Windows и прослушиваемые им.

Событие активируется, только если все строки совпадают. Например, если Служба MyService, размещенная в MyServiceProcess.exe должна запускаться триггером при открытии порта UDP 5001, данные триггера будут представлять собой представление в Юникоде "5001\0UDP\0%programfiles%\MyApplication\MyServiceProcess.exe\0MyService\0\0".

Примечание Прежде чем это событие можно будет зарегистрировать, необходимо остановить службу базовой подсистемы фильтрации (BFE) и все зависящие от нее службы. После регистрации события можно перезапустить службу BFE и зависящие от нее службы. Дополнительные сведения см. в подразделе "Примечания".
 
SERVICE_TRIGGER_TYPE_GROUP_POLICY
5
Событие активируется при изменении политики компьютера или политики пользователя. Это событие триггера обычно используется для запуска службы.

Элемент pTriggerSubtype указывает MACHINE_POLICY_PRESENT_GUID или USER_POLICY_PRESENT_GUID.

Элемент pDataItems не используется.

SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY
2
Событие активируется, когда первый IP-адрес в сетевом стеке TCP/IP становится доступным или последний IP-адрес в стеке становится недоступным. Это событие триггера можно использовать для запуска или остановки службы.

Элемент pTriggerSubtype указывает NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID или NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID.

Элемент pDataItems не используется.

SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT
6
Событие активируется при поступлении пакета или запроса по определенному сетевому протоколу. Этот запрос обычно используется для запуска службы, которая остановилась после истечения времени ожидания простоя, когда нет никаких действий.

Windows 7 и Windows Server 2008 R2: Этот тип триггера не поддерживается до Windows 8 и Windows Server 2012.

Элемент pTriggerSubtype указывает одно из следующих значений: RPC_INTERFACE_EVENT_GUID или NAMED_PIPE_EVENT_GUID.

Член pDataItems указывает GUID конечной точки или интерфейса. Строка должна быть в Юникоде. Событие активируется, если строка является точным совпадением.

Член dwAction должен быть SERVICE_TRIGGER_ACTION_SERVICE_START.

dwAction

Действие, выполняемое при возникновении указанного события триггера. Этот элемент может быть одним из следующих значений.

Значение Значение
SERVICE_TRIGGER_ACTION_SERVICE_START
1
Запустите службу при возникновении указанного события триггера.
SERVICE_TRIGGER_ACTION_SERVICE_STOP
2
Остановите службу при возникновении указанного события триггера.

pTriggerSubtype

Указывает на GUID, который идентифицирует подтип события триггера. Значение этого элемента зависит от значения элемента dwTriggerType .

Если параметр dwTriggerType имеет значение SERVICE_TRIGGER_TYPE_CUSTOM, pTriggerSubtype — это GUID, идентифицирующий настраиваемый поставщик событий.

Если параметр dwTriggerType имеет SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL, pTriggerSubtype — это GUID, идентифицирующий класс интерфейса устройства.

Если параметр dwTriggerType имеет значение SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT, pTriggerSubtype является одним из следующих значений.

Значение Значение
NAMED_PIPE_EVENT_GUID
1F81D131-3FAC-4537-9E0C-7E7B0C2F4B55
Событие активируется при выполнении запроса на открытие именованного канала, указанного в pDataItems. Член dwTriggerType должен быть SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT. Член dwAction должен быть SERVICE_TRIGGER_ACTION_SERVICE_START.
RPC_INTERFACE_EVENT_GUID
BC90D167-9470-4139-A9BA-BE0BBBF5B74D
Событие активируется при поступлении запроса на разрешение конечной точки для GUID интерфейса RPC, заданного pDataItems. Член dwTriggerType должен быть SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT. Член dwAction должен быть SERVICE_TRIGGER_ACTION_SERVICE_START.
 

Для других типов событий триггера pTriggerSubType может иметь одно из следующих значений.

Значение Значение
DOMAIN_JOIN_GUID
1ce20aba-9851-4421-9430-1ddeb766e809
Событие активируется, когда компьютер присоединяется к домену. Элемент dwTriggerType должен быть SERVICE_TRIGGER_TYPE_DOMAIN_JOIN.
DOMAIN_LEAVE_GUID
ddaf516e-58c2-4866-9574-c3b615d42ea1
Событие активируется, когда компьютер покидает домен. Элемент dwTriggerType должен быть SERVICE_TRIGGER_TYPE_DOMAIN_JOIN.
FIREWALL_PORT_OPEN_GUID
b7569e07-8421-4ee0-ad10-86915afdad09
Событие активируется при открытии указанного порта брандмауэра. Элемент dwTriggerType должен быть SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT.
FIREWALL_PORT_CLOSE_GUID
a144ed38-8e12-4de4-9d96-e64740b1a524
Событие активируется примерно через 60 секунд после закрытия указанного порта брандмауэра. Элемент dwTriggerType должен быть SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT.
MACHINE_POLICY_PRESENT_GUID
659FCAE6-5BDB-4DA9-B1FF-CA2A178D46E0
Событие активируется при изменении политики компьютера. Элемент dwTriggerType должен быть SERVICE_TRIGGER_TYPE_GROUP_POLICY.
NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID
4f27f2de-14e2-430b-a549-7cd48cbc8245
Событие активируется, когда первый IP-адрес в сетевом стеке TCP/IP становится доступным. Элемент dwTriggerType должен быть SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY.
NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID
cc4ba62a-162e-4648-847a-b6bdf993e335
Событие активируется, когда последний IP-адрес в сетевом стеке TCP/IP становится недоступным. Элемент dwTriggerType должен быть SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY.
USER_POLICY_PRESENT_GUID
54FB46C8-F089-464C-B1FD-59D1B62C3B50
Событие активируется при изменении политики пользователя. Элемент dwTriggerType должен быть SERVICE_TRIGGER_TYPE_GROUP_POLICY.

cDataItems

Количество SERVICE_TRIGGER_SPECIFIC_DATA_ITEM структур в массиве, на которые указывает pDataItems.

Этот элемент действителен, только если элемент dwDataType является SERVICE_TRIGGER_TYPE_CUSTOM, SERVICE_TRIGGER_TYPE_DEVICE_ARRIVAL, SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT или SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT.

pDataItems

Указатель на массив SERVICE_TRIGGER_SPECIFIC_DATA_ITEM структур, содержащих данные, относящиеся к триггеру.

Комментарии

В системе, присоединенной к домену, параметры политики безопасности могут препятствовать остановке службы BFE и зависимых от нее служб или их автоматическому перезапуску. В этом случае необходимо отключить службы, а затем снова включить их после регистрации события. Чтобы сделать это программным способом, сохраните исходный тип запуска каждой службы, измените тип запуска службы на SERVICE_DISABLED, зарегистрируйте событие, а затем восстановите исходный тип запуска службы. Сведения об изменении типа запуска службы см. в разделе ChangeServiceConfig.

Чтобы отключить службы с помощью программы командной строки SC, используйте команду sc config bfe start= disabled , чтобы отключить службу BFE и ее зависимые службы, а затем используйте команду net stop bfe /Y , чтобы остановить их. Чтобы повторно включить службы, используйте команду sc config bfe start= auto. Дополнительные сведения о программе командной строки SC см. в разделе Управление службой с помощью SC.

Если отключить службы невозможно, может потребоваться перезапустить систему после установки службы, которая регистрирует событие. В этом случае не отключайте службу BFE и ее зависимые службы перед перезапуском системы, так как система может работать неправильно, если эти службы остаются отключенными.

Требования

Требование Значение
Минимальная версия клиента Windows 7 [только классические приложения]
Минимальная версия сервера Windows Server 2008 R2 [только классические приложения]
Верхняя часть winsvc.h

См. также раздел

ChangeServiceConfig2

QueryServiceConfig2

SERVICE_TRIGGER_INFO

SERVICE_TRIGGER_SPECIFIC_DATA_ITEM

События триггера службы