共用方式為


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 成員會指定裝置介面類別的一或多個硬體標識碼和相容的標識符字串。 字串必須是 Unicode。 如果指定多個字串,如果其中一個字串相符,就會觸發事件。 例如,當裝置介面類別的裝置GUID_DEVINTERFACE_DISK {53f56307-b6bf-11d0-94f2-00a0c91efb8b} 和硬體標識符 "USBSTOR\GenDisk" 字元串送達時,就會啟動 Wpdbusenum 服務。

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 成員會指定埠、通訊協定,以及選擇性的可執行檔路徑和使用者資訊, (SID 字串或名稱) 接聽事件的服務。 “RPC” 令牌可用來取代埠,以指定 RPC 所使用的任何接聽套接字。 「系統」令牌可用來取代可執行文件路徑,以指定 Windows 核心所建立和接聽的埠。

只有在所有字串都相符時,才會觸發事件。 例如,如果裝載於 MyServiceProcess.exe 內的 MyService 是在埠 UDP 5001 開啟時觸發啟動,則觸發程式特定數據會是 的 "5001\0UDP\0%programfiles%\MyApplication\MyServiceProcess.exe\0MyService\0\0"Unicode 表示法。

注意 在註冊此事件之前,基礎篩選引擎 (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
當 TCP/IP 網路堆疊上的第一個 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。 字串必須是 Unicode。 如果字串完全相符,則事件會觸發。

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
當端點解析要求到達 pDataItems 所指定的 RPC 介面 GUID 時,就會觸發此事件。 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
當 TCP/IP 網路堆疊上的第一個 IP 位址可供使用時,就會觸發此事件。 dwTriggerType 成員必須是SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY。
NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID
cc4ba62a-162e-4648-847a-b6bdf993e335
當 TCP/IP 網路堆疊上的最後一個 IP 位址變成無法使用時,就會觸發此事件。 dwTriggerType 成員必須是SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY。
USER_POLICY_PRESENT_GUID
54FB46C8-F089-464C-B1FD-59D1B62C3B50
當使用者原則變更時,就會觸發事件。 dwTriggerType 成員必須SERVICE_TRIGGER_TYPE_GROUP_POLICY。

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= 停用 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

服務觸發程式事件