共用方式為


WmiSystemControl 函式 (wmilib.h)

WmiSystemControl 例程是使用 WMI 連結庫支援處理 WMI IRP 例程的驅動程式分派例程。

語法

NTSTATUS WmiSystemControl(
  [in]      PWMILIB_CONTEXT         WmiLibInfo,
  [in]      PDEVICE_OBJECT          DeviceObject,
  [in, out] PIRP                    Irp,
  [out]     PSYSCTL_IRP_DISPOSITION IrpDisposition
);

參數

[in] WmiLibInfo

WMILIB_CONTEXT 結構的指標,其中包含驅動程式數據區塊和事件區塊的註冊資訊,並定義驅動程式 WMI 連結庫回呼例程的進入點。

[in] DeviceObject

驅動程式 DEVICE_OBJECT的指標。

[in, out] Irp

IRP的指標。

[out] IrpDisposition

SYSCTL_IRP_DISPOSITION 類型的列舉值指標,指出 IRP 的處理方式。 WmiSystemControl 一律設定此值,即使它傳回非成功的 NTSTATUS 程式代碼也一樣。

SYSCTL_IRP_DISPOSITION 是 Wmilib.h 中的列舉,並包含下列值:

IrpProcessed

IRP 已處理並可能完成。 如果驅動程式的 DpWmiXxx 例程 WmiSystemControl 未完成 IRP,驅動程式必須呼叫 WmiCompleteRequestWmiSystemControl 傳回之後完成 IRP。

IrpNotCompleted

IRP 已處理但未完成,因為 WMI 偵測到錯誤,並使用適當的錯誤碼設定 IRP,或處理 IRP_MN_REGINFOIRP_MN_REGINFO_EX 要求。 驅動程式必須呼叫 IoCompleteRequest來完成 IRP。

IrpNotWmi

IRP 不是 WMI 要求(也就是 WMI 無法辨識 IRP 的次要程式代碼)。 如果驅動程式使用此 IRP_MN_XXX處理 IRP_MJ_SYSTEM_CONTROL 要求,則應該處理 IRP;否則,驅動程式應將 IRP 轉送至下一個較低的驅動程式。 如果驅動程式是最低層級的驅動程式,則必須完成 IRP。

IrpForward

IRP 是以另一個裝置對象為目標(也就是 IRP 中 Parameters.WMI.ProviderId 的裝置物件指標 不符合驅動程式在呼叫 ioWMIRegistrationControl時傳遞的指標)。 驅動程式必須將 IRP 轉送至下一個較低的驅動程式。 如果驅動程式是最低層級的驅動程式,則必須完成 IRP。

傳回值

WmiSystemControl 會傳回STATUS_SUCCESS或下列其中一個錯誤碼:

言論

當驅動程式收到具有 WMI IRP 次要程式代碼的 IRP_MJ_SYSTEM_CONTROL 要求時,它會使用驅動程式 WMILIB_CONTEXT 結構的指標、其裝置物件的指標和 IRP 的指標,呼叫 WmiSystemControlWMILIB_CONTEXT 結構包含驅動程序數據區塊和事件區塊的註冊資訊,並定義其WMI連結庫回呼例程的進入點。

WmiSystemControl 確認 IRP 是 WMI 要求,並判斷要求指定的區塊是否對驅動程式有效。 如果是,它會在驅動程式的 WMILIB_CONTEXT 結構中呼叫適當的 DpWmiXxx 進入點來處理 IRP。 WMI 會在 IRQL PASSIVE_LEVEL呼叫驅動程式的 DpWmiXxx 例程時執行。

當驅動程式將 IRP_MJ_SYSTEM_CONTROL 要求轉送至下一個較低的驅動程式時,必須在 IRQL PASSIVE_LEVEL執行。

要求

要求 價值
最低支援的用戶端 適用於 Windows 2000 和更新版本的 Windows。
目標平臺 普遍
標頭 wmilib.h (包括 Wmilib.h)
連結庫 Wmilib.lib
IRQL PASSIVE_LEVEL (請參閱一節)
DDI 合規性規則 WmiComplete(wdm)

另請參閱

DpWmiExecuteMethod

DpWmiFunctionControl

DpWmiQueryDataBlock

DpWmiQueryReginfo

DpWmiSetDataBlock

DpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT