次の方法で共有


バッテリ ミニクラス ドライバーの DispatchSystemControl ルーチン

バッテリ ミニクラス ドライバーは、IRP_MJ_SYSTEM_CONTROL IRP を処理する DispatchSystemControl ルーチンを提供することで、Windows Management Instrumentation (WMI) をサポートする必要があります。 WMI は、ドライバーが測定データと計測データを公開するための一貫した方法を提供します。

初期処理を実行するために、バッテリ ミニクラス ドライバーは、関数のディスパッチ テーブルを指定する WmiLibContext パラメーターを受け取る BatteryClassSystemControl ルーチンを使用します。 このルーチンは、IRP_MJ_SYSTEM_CONTROL の MinorFunction メンバーを使用して、呼び出すディスパッチ関数を決定します。

バッテリー デバイスのすべてのドライバーは、特定の WMI クエリを処理する必要があります。 バッテリー ミニクラス ドライバーは、これらの WMI クエリを直接サポートするのではなく、バッテリー クラス ドライバーに転送します。 WMI クエリを処理するために、ミニクラス ドライバーは、WMILIB_CONTEXTQueryWmiDataBlockメンバーで DpWmiQueryDataBlock ルーチンへのポインターを提供します。 ミニクラス ドライバーは、他の種類の WMI 要求を処理する必要はなく、処理しない場合は WMILIB_CONTEXT の他のメンバーをゼロに設定できます。

その DpWmiQueryDataBlock ルーチンでは、ミニクラス ドライバーは BatteryClassQueryWmiDataBlock ルーチンを呼び出し、可能であればバッテリー クラス ドライバーが WMI クエリ要求を処理できるようにします。 バッテリー クラス ドライバーが WMI クラス GUID を処理する場合、IRP が完了します。 それ以外の場合、 BatteryClassQueryWmiDataBlock は値 STATUS_WMI_GUID_NOT_FOUND を返します。 その後、ミニクラス ドライバーはドライバー固有の処理を実行し、 WmiCompleteRequestを使用して要求を完了できます。

バッテリ ミニクラス ドライバーは、WMI IRP 処理のために BatteryClassQueryWmiDataBlock を呼び出すだけで済みます。 バッテリ ミニクラス ドライバーの最小 WMI 処理実装では、 BatteryClassQueryWmiDataBlock が STATUS_WMI_GUID_NOT_FOUND を返す場合、ミニクラス ドライバーは単に STATUS_WMI_GUID_NOT_FOUND の状態値で WmiCompleteRequest を呼び出します。