WMI 要求の処理
すべてのドライバーは、WMI 要求を処理する DispatchSystemControl ルーチンのディスパッチ テーブル エントリ ポイントを設定する必要があります。 ドライバーが WMI データ プロバイダーとして登録されている場合、すべての WMI 要求を処理する必要があります。 それ以外の場合、ドライバーは、次の下位ドライバーにすべての WMI 要求を転送する必要があります。
すべての WMI IRP には、メジャー コード IRP_MJ_SYSTEM_CONTROL と、次のいずれかのマイナー コードがあります。
IRP_MN_REGINFO、IRP_MN_REGINFO_EX—ドライバーが IoWMIRegistrationControl を呼び出した後、ドライバーの登録情報を照会または更新します。
IRP_MN_QUERY_ALL_DATA、IRP_MN_QUERY_SINGLE_INSTANCE—特定のデータ ブロックのすべてのインスタンスまたは単一インスタンスを照会します。
IRP_MN_CHANGE_SINGLE_ITEM、IRP_MN_CHANGE_SINGLE_INSTANCE—データ ブロックのインスタンス内の 1 つの項目または複数の項目を変更するようドライバーに要求します。
IRP_MN_ENABLE_COLLECTION、IRP_MN_DISABLE_COLLECTION—ドライバーが収集コストが高いものとして登録したブロックのデータの蓄積を始めるか、そのようなブロックのデータの蓄積を停止するようドライバーに要求します。
IRP_MN_ENABLE_EVENTS、IRP_MN_DISABLE_EVENTS—有効なときにイベントが発生した場合に特定のイベントの通知の送信を開始するか、そのようなイベントの通知の送信を停止するようドライバーに要求します。
IRP_MN_EXECUTE_METHOD—データ ブロックに関連付けられたメソッドを実行するようドライバーに要求します。
WMI カーネル モード コンポーネントは、ドライバーが WMI データ プロバイダーとして正常に登録された後 (通常は、ユーザー モードのデータ コンシューマーがドライバーのデバイスの WMI 情報を要求したとき)、いつでも WMI IRP を送信できます。 ドライバーが IoWMIRegistrationControl を呼び出すことで WMI データ プロバイダーとして登録する場合、後続の各 WMI 要求を次のいずれかの方法で処理する必要があります。
カーネル モードの WMI ライブラリ ルーチン WmiSystemControl を呼び出します。 ドライバーは、WmiSystemControl を呼び出し、動的インスタンス名を使用しないブロックと、静的インスタンス名が単一の基本名文字列または PDO のデバイス インスタンス ID に基づいているブロックに関する要求のみ処理できます。 詳しくは、「WmiSystemControl を呼び出して WMI IRP を処理する」をご覧ください。
DispatchSystemControl ルーチンで、ドライバーが IoWMIRegistrationControl の呼び出しで渡したデバイス オブジェクトへのポインターによってタグ付けされた要求を処理して完了し、他の IRP_MJ_SYSTEM_CONTROL 要求を次の下位ドライバーに転送します。 詳細については、「DispatchSystemControl ルーチンでの WMI IRP の処理」を参照してください。
WMI マイナー IRP の一覧については、「WMI マイナー IRP」をご覧ください。