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

ドライバーのデータ ブロックとイベント ブロックの登録情報を格納し、ドライバーの WMI ライブラリ コールバック ルーチンのエントリ ポイントを定義する WMILIB_CONTEXT構造体への ポインター。

[in] DeviceObject

ドライバーの DEVICE_OBJECTへのポインター。

[in, out] Irp

IRP へのポインター。

[out] IrpDisposition

IRP の処理方法を示す SYSCTL_IRP_DISPOSITION 型の列挙値へのポインター。 WmiSystemControl は 、成功しない NTSTATUS コードを返す場合でも、常にこの値を設定します。

SYSCTL_IRP_DISPOSITION は Wmilib.h の列挙であり、次の値が含まれています。

IrpProcessed

IRP が処理され、完了した可能性があります。 WmiSystemControl によって呼び出されたドライバーの DpWmiXxx ルーチンが IRP を完了しなかった場合、ドライバーは WmiCompleteRequest を呼び出して、WmiSystemControl が返された後に IRP を完了する必要があります。

IrpNotCompleted

WMI がエラーを検出し、適切なエラー コードで IRP を設定したか、 IRP_MN_REGINFOまたはIRP_MN_REGINFO_EX 要求を処理したため、IRP は処理されましたが 完了していません。 ドライバーは 、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 へのポインターを使用して WmiSystemControl を呼び出します。 WMILIB_CONTEXT構造体には、ドライバーのデータ ブロックとイベント ブロックの登録情報が含まれており、WMI ライブラリ コールバック ルーチンのエントリ ポイントを定義します。

WmiSystemControl は、IRP が WMI 要求であることを確認し、要求で指定されたブロックがドライバーに対して有効かどうかを判断します。 その場合は、ドライバーのWMILIB_CONTEXT構造で適切な DpWmiXxx エントリ ポイントを呼び出すことによって IRP を処理します。 WMI は、ドライバーの DpWmiXxx ルーチンを呼び出すときに、IRQL PASSIVE_LEVELで実行されています。

ドライバーは、次の下位ドライバーにIRP_MJ_SYSTEM_CONTROL要求を転送するときに、IRQL PASSIVE_LEVEL で実行されている必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 以降のバージョンの Windows で使用できます。
対象プラットフォーム ユニバーサル
Header wmilib.h (Wmilib.h を含む)
Library 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