撰寫事件提供者

事件提供者是一個 COM 物件,提供 WMI 內建和外來事件的通知。 內部事件會向 WMI 報告內部資料變更,而 extrinsic 事件則會報告內部事件未由內部事件描述的使用者定義事件。 例如,回應變更、建立或刪除 Win32_LogicalDisk 類別的事件會分類為內建事件。 根據修改、建立或刪除現有 WMI 物件以外的專案所產生的事件是外來事件。 不論支援的類別為何,您都可以以相同的方式實作所有事件提供者。

下列程式描述如何實作事件提供者。

實作事件提供者

  1. 使用 WMI 設計和註冊您的類別提供者。

    類別提供者會藉由建立 __Win32Provider 實例和 __EventProviderRegistration 類別,向 WMI 註冊。 如需詳細資訊,請參閱 註冊事件提供者

  2. 為您的提供者實作 IWbemProviderInit 介面。

    IWbemProviderInit介面是通用介面 WMI 用來載入和初始化所有提供者。 如需詳細資訊,請參閱 初始化提供者

  3. 實作 IWbemEventProvider 作為提供者的主要介面。

    IWbemEventProvider介面會使用ProviderEvents方法將事件提供給 WMI。 如需詳細資訊,請參閱 實作事件提供者的主要介面

    注意

    事件提供者必須使用多執行緒模型 「Both」。

     

  4. 您也可以選擇性地實作 IWbemEventProviderQuerySink 介面,以提高事件提供者的效能。

    IWbemEventProviderQuerySink介面可讓提供者在傳送回應至 WMI 之前優化查詢,而且最適用于提供多個類型事件且需要盡可能執行許多內部優化之事件的提供者。 如需詳細資訊,請參閱 優化事件提供者

  5. 實作 IWbemEventProviderSecurity 介面,以限制取用者 (SID) 的特定安全性識別碼,或實作 IWbemEventSink::SetSinkSecurity 來保護接收本身。 提供者也可以設定事件類別中的 SECURITY_DESCRIPTOR 屬性,以保護 MOF 程式碼中的個別事件。 如需詳細資訊,請參閱 保護 WMI 事件

  6. 新增提供者所需的任何其他程式碼。

    設計提供者時,您很可能需要呼叫 WMI 介面。 如需詳細資訊,請參閱 呼叫方法

    擷取用戶端的資訊時,您可能需要存取該用戶端的安全性層級。 如需詳細資訊,請參閱 模擬用戶端

  7. 以您的新程式碼取代既有的提供者。

    如果您沒有預先存在的提供者可複製,則不需要執行此步驟。 如需詳細資訊,請參閱 更新提供者

用戶端應用程式可以向 WMI 註冊為事件取用者來要求事件。 如需詳細資訊,請參閱 接收 WMI 事件