共用方式為


IRP_MN_ENABLE_EVENTS

任何註冊一或多個事件區塊的 WMI 驅動程式都必須處理此 IRP。 驅動程式可以藉由呼叫 WmiSystemControl 或處理 IRP 本身來處理 WMI IRP,如 處理 WMI 要求中所述。

如果驅動程式呼叫 WmiSystemControl 來處理 IRP_MN_ENABLE_EVENTS 要求,WMI 會接著呼叫該驅動程式的 DpWmiFunctionControl 常式。

主要程式碼

IRP_MJ_SYSTEM_CONTROL

傳送時

WMI 會傳送此 IRP,通知驅動程式資料取用者已要求事件通知。

WMI 會在 IRQL = PASSIVE_LEVEL任意執行緒內容中傳送此 IRP。

輸入參數

Parameters.WMI.ProviderId 指向應回應要求的驅動程式裝置物件。 此指標位於 IRP 的驅動程式 I/O 堆疊位置。

Parameters.WMI.DataPath 指向識別要啟用之事件區塊的 GUID。

Parameters.WMI.BufferSize指出Parameters.WMI.Buffer的非分頁緩衝區大小,其必須大於或等於 (WNODE_HEADER) 的大小。 不註冊追蹤區塊的驅動程式 (WMIREG_FLAG_TRACED_GUID) 可以忽略此參數。

Parameters.WMI.Buffer 指向 WNODE_HEADER ,指出事件是否應追蹤 (WMI_FLAGS_TRACED_GUID) 並提供系統記錄器的控制碼。 不註冊追蹤區塊的驅動程式 (WMIREG_FLAG_TRACED_GUID) 可以忽略此參數。

輸出參數

無。

I/O 狀態欄塊

如果驅動程式藉由呼叫 WmiSystemControl來處理 IRP,WMI 會在 I/O 狀態欄塊中設定 Irp-IoStatus.Status >Irp-IoStatus.Information >

否則,驅動程式會將 Irp-IoStatus.Status > 設定為STATUS_SUCCESS或適當的錯誤狀態,如下所示:

STATUS_WMI_GUID_NOT_FOUND

STATUS_INVALID_DEVICE_REQUEST

成功時,驅動程式會將 Irp-IoStatus.Information > 設定為零。

作業

驅動程式可以藉由呼叫 WmiSystemControl 或處理 IRP 本身來處理 WMI IRP,如 處理 WMI 要求中所述。

如果驅動程式藉由呼叫 WmiSystemControl 來處理 WMI IRP,該常式會呼叫驅動程式的 DpWmiFunctionControl 常式,或如果驅動程式未定義常式,則會傳回STATUS_SUCCESS。

如果驅動程式處理 IRP_MN_ENABLE_EVENTS 要求本身,只有當 Parameters.WMI.ProviderId 指向與驅動程式傳遞給 IoWMIRegistrationControl的指標相同的裝置物件時,才應該這麼做。 否則,驅動程式必須將要求轉送至下一個較低的驅動程式。

在驅動程式處理要求之前,它應該判斷 Parameters.WMI.DataPath 是否指向驅動程式支援的 GUID。 如果沒有,驅動程式必須失敗 IRP 並傳回STATUS_WMI_GUID_NOT_FOUND。

如果驅動程式支援事件區塊,它會針對該資料區塊的所有實例啟用 事件。

驅動程式不需要檢查事件區塊是否已啟用事件,因為 WMI 會在第一個資料取用者啟用事件時,傳送單一要求來啟用事件區塊。 WMI 不會傳送另一個要求來啟用,而不需要介入停用要求。

註冊追蹤區塊的驅動程式 (WMIREG_FLAG_TRACED_GUID) 也必須判斷要將事件傳送至 WMI 或系統記錄器進行追蹤。 如果要求追蹤, Parameters.WMI.Buffer 會指向 使用 WNODE_FLAG_TRACED_GUID 設定 Flags 的WNODE_HEADER結構,而 HistoricalCoNtext 包含記錄器的控制碼。

如需定義事件區塊、傳送事件和追蹤的詳細資訊,請參閱 Windows Management Instrumentation

規格需求

標頭

Wdm.h (包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另請參閱

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_EVENTS

WMILIB_CONTEXT

WmiSystemControl

WNODE_EVENT_ITEM

WNODE_HEADER