共用方式為


使用 WmiFireEvent 傳送事件

驅動程式可以呼叫 WmiFireEvent 來傳送不使用動態實例名稱的事件,以及在單一基底名稱字串或 PDO 的裝置實例識別碼上建立靜態實例名稱。

事件必須是區塊的單一實例,也就是說,驅動程式無法呼叫 WmiFireEvent 來傳送由單一專案或多個實例所組成的事件。 若要傳送這類事件,驅動程式必須呼叫 IoWMIWriteEvent,如 使用IoWMIWriteEvent傳送事件中所述。

在 WMI 啟用事件之前,驅動程式不應該傳送事件。 啟用事件之後,當事件的觸發條件發生時,驅動程式:

  1. 從非分頁集區配置緩衝區,並將事件數據寫入緩衝區。 如果事件沒有數據,驅動程式可以略過此步驟。

  2. 使用下列參數呼叫 WmiFireEvent

    • 驅動程式裝置物件的指標

    • 代表事件區塊的 GUID 指標

    • 如果事件區塊有多個實例,則需要取得實例的索引值

    • 如果有數據要和事件一起傳送,數據的位元組數為多少;如果沒有,則為0。

    • 如果要附加數據至事件,則提供包含數據的驅動程式分配緩衝區指標,如果沒有數據,則為 NULL

    驅動程式必須配置從非分頁集區傳遞至 WmiFireEvent 的所有參數,包括事件數據緩衝區。 WMI 會釋放驅動程式配置的記憶體,而不需要驅動程式進一步介入。

在 WmiFireEvent 傳回之後,驅動程式會繼續監視事件的觸發條件,並在每次觸發條件發生時傳送事件,直到 WMI 停用該事件為止。