判斷要接收的事件類型
註冊以接收事件之前,您必須先判斷要接收的事件類型:內部 或 外部。 若需瞭解如何接收事件的詳細資訊,請參閱 接收 WMI 事件。 如需提供事件的詳細資訊,請參閱 開發 WMI 提供者 和 撰寫事件提供者。 如需接收和提供事件之安全性考慮的詳細資訊,請參閱 保護 WMI 事件。
內在事件
內部事件是回應標準 WMI 數據模型變更時所發生的事件。 每個內部事件類別都代表特定類型的變更,而且會在 WMI 或提供者建立、刪除或修改命名空間、類別或類別實例時發生。 例如,建立 Win32_LogicalDisk 實例會導致 __InstanceCreationEvent 實例。
WMI 會為儲存在 WMI 存放庫中的物件建立內部事件。 提供者會產生動態類別的內建事件,但如果沒有可用的提供者,WMI 可以建立動態類別的實例。 WMI 會使用輪詢來偵測變更。 下表列出 WMI 用來報告內建事件的系統類別。
系統類別 | 描述 |
---|---|
__ClassCreationEvent | 建立類別時通知取用者。 |
__ClassDeletionEvent | 刪除類別時通知取用者。 |
__ClassModificationEvent | 當類別被修改時通知使用者。 |
__InstanceCreationEvent | 在建立類別實例時通知取用者。 |
__InstanceOperationEvent | 在發生任何實例事件時通知取用者,例如建立、刪除或修改實例。 您可以在查詢中使用這個類別,以取得與 實例相關聯的所有類型事件。 |
__InstanceDeletionEvent | 刪除實例時通知取用者。 |
__InstanceModificationEvent | 當實例被修改時通知消費者。 |
__NamespaceCreationEvent | 建立命名空間時通知取用者。 |
__命名空間刪除事件 | 刪除命名空間時通知取用者。 |
__NamespaceModificationEvent | 修改命名空間時通知取用者。 |
__ConsumerFailureEvent | 當事件消費者因為故障而丟失其他事件時,通知消費者。 |
__事件丟失事件 | 當某個其他事件未能傳遞給要求的事件取用者而被丟棄時,通知消費者。 |
__EventQueueOverflowEvent | 當事件因傳遞佇列溢位而被丟棄時,通知消費者。 |
__MethodInvocationEvent | 在發生方法呼叫事件時通知取用者。 |
外在事件
外源事件是預先定義的事件,無法直接連結至 WMI 數據模型中的變更。 因此,WMI 可讓事件提供者定義描述事件的事件類別。 例如,描述計算機切換到待用模式的事件是一個外在事件。 提供者會從 __ExtrinsicEvent 系統類別衍生外部事件,這是 __Event 系統類別的子類別。 系統登錄 和 SNMP 提供者會定義外部事件類別,例如 RegistryKeyChangeEvent,這會在登錄機碼變更時通知取用者。 如需詳細資訊,請參閱 註冊系統登錄事件 和 寫入事件提供者。
在下列範例中,事件提供者會將安全性違規報告給一或多個建築物。 下列類別可能會針對代表安全性違規的外部事件進行定義。
class SecurityViolationEvent : __ExtrinsicEvent
{
string Building; // building where violation occurred
sint32 EntranceNumber; // entrance where violation occurred
datetime TimeOfDetection; // date and time of violation
}
若要接收安全性違規通知,取用者會註冊 SecurityViolationEvent 事件類型。 除非另有指定,否則消費者會在所有時段和所有建築物中收到所有安全違規事件的通知。 事件類別還包含可供使用者用於請求更具體事件的資訊。
在下列範例中,查詢會僅為大樓 24 的安全性違規事件註冊使用者。
SELECT * FROM SecurityViolationEvent WHERE Building = 24;