共用方式為


IRP_MN_DISABLE_COLLECTION

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

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

主要程式碼

IRP_MJ_SYSTEM_CONTROL

傳送時

WMI 會傳送此 IRP 來要求驅動程式停止累積資料區塊的資料區塊,該區塊會註冊為昂貴,且已啟用資料收集。

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

輸入參數

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

Parameters.WMI.DataPath 指向 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 > 設定為零。

作業

驅動程式會在驅動程式註冊或更新資料區塊時,在WMIREGGUIDWMIGUIDREGINFO結構的Flags成員中設定WMIREG_FLAG_EXPENSIVE,將資料區塊註冊為昂貴。 在驅動程式收到啟用收集的明確要求之前,驅動程式不需要累積這類區塊的資料。

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

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

在處理要求之前,驅動程式必須判斷 Parameters.WMI.DataPath 是否指向驅動程式支援的 GUID。 如果沒有,驅動程式必須失敗 IRP 並傳回STATUS_WMI_GUID_NOT_FOUND。 如果資料區塊有效,但未向WMIREG_FLAG_EXPENSIVE註冊,驅動程式可以傳回STATUS_SUCCESS,並採取不進一步的動作。

驅動程式不需要檢查資料收集是否已經停用,因為 WMI 會在最後一個資料取用者停用該區塊的集合時,傳送資料區塊的單一停用要求。 WMI 不會在沒有啟用的交錯要求的情況下傳送另一個停用要求。

規格需求

標頭

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

另請參閱

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_ENABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WMIGUIDREGINFO

WmiSystemControl