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
触发器事件类型。 此成员可以是以下值之一。
值 | 含义 |
---|---|
|
事件是由 Windows (ETW) 提供程序 的事件跟踪 生成的自定义事件。 此触发器事件可用于启动或停止服务。
pTriggerSubtype 成员指定事件提供程序的 GUID。 pDataItems 成员指定提供程序定义的特定于触发器的数据。 |
|
当指定设备接口类的设备到达或在系统启动时存在时,将触发 事件。 此触发器事件通常用于启动服务。
pTriggerSubtype 成员指定设备接口类 GUID。 这些 GUID 在 Windows 驱动程序工具包 (WDK) 提供的特定于设备的头文件中定义。 pDataItems 成员为设备接口类指定一个或多个硬件 ID 和兼容的 ID 字符串。 字符串必须是 Unicode。 如果指定了多个字符串,则当其中任何一个字符串匹配时,将触发该事件。 例如,当设备接口类的设备GUID_DEVINTERFACE_DISK {53f56307-b6bf-11d0-94f2-00a0c91efb8b} 且硬件 ID 字符串 |
|
当计算机加入或离开域时,将触发 该事件。 此触发器事件可用于启动或停止服务。
pTriggerSubtype 成员指定DOMAIN_JOIN_GUID或DOMAIN_LEAVE_GUID。 不使用 pDataItems 成员。 |
|
当防火墙端口打开或防火墙端口关闭后大约 60 秒时,将触发该事件。 此触发器事件可用于启动或停止服务。
pTriggerSubtype 成员指定FIREWALL_PORT_OPEN_GUID或FIREWALL_PORT_CLOSE_GUID。 pDataItems 成员指定侦听事件的服务的端口、协议以及可执行路径和用户信息, (SID 字符串或名称) 。 可以使用“RPC”令牌代替端口来指定 RPC 使用的任何侦听套接字。 可以使用“系统”令牌代替可执行路径,以指定由 Windows 内核创建和侦听的端口。 仅当所有字符串都匹配时,才会触发该事件。 例如,如果在端口 UDP 5001 打开时触发 MyServiceProcess.exe 内托管的 MyService,则特定于触发器的数据将是 的 注意 在注册此事件之前,基本筛选引擎 (BFE) 服务,并且必须停止依赖它的所有服务。 注册事件后,可以重启 BFE 服务和依赖于它的服务。 有关详细信息,请参阅“备注”。
|
|
发生计算机策略或用户策略更改时,将触发 该事件。 此触发器事件通常用于启动服务。
pTriggerSubtype 成员指定MACHINE_POLICY_PRESENT_GUID或USER_POLICY_PRESENT_GUID。 不使用 pDataItems 成员。 |
|
当 TCP/IP 网络堆栈上的第一个 IP 地址可用或堆栈上的最后一个 IP 地址不可用时,将触发该事件。 此触发器事件可用于启动或停止服务。
pTriggerSubtype 成员指定NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID或NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID。 不使用 pDataItems 成员。 |
|
当数据包或请求到达特定网络协议时,将触发该事件。 此请求通常用于启动在空闲超时后自行停止的服务,当没有工作要做时。
Windows 7 和 Windows Server 2008 R2: 在Windows 8和Windows Server 2012之前,不支持此触发器类型。 pTriggerSubtype 成员指定以下值之一:RPC_INTERFACE_EVENT_GUID 或 NAMED_PIPE_EVENT_GUID。 pDataItems 成员指定终结点或接口 GUID。 字符串必须是 Unicode。 如果字符串完全匹配,则事件将触发。 dwAction 成员必须SERVICE_TRIGGER_ACTION_SERVICE_START。 |
dwAction
发生指定的触发器事件时要执行的操作。 此成员可以是以下值之一。
值 | 含义 |
---|---|
|
在发生指定的触发器事件时启动服务。 |
|
在发生指定的触发器事件时停止服务。 |
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 为以下值之一。
对于其他触发器事件类型, pTriggerSubType 可以是以下值之一。
cDataItems
pDataItems 指向的数组中的SERVICE_TRIGGER_SPECIFIC_DATA_ITEM结构数。
仅当 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 |