ブロックを登録するための WMI ライブラリの使用
ドライバーは、動的インスタンス名を使用しないブロックを登録している場合、または PDO またはドライバー定義のベース名文字列に基づいて静的インスタンス名を使用する場合、WMI ライブラリを使用して、 IRP_MN_REGINFO および IRP_MN_REGINFO_EX リクエストを処理することができます。 この場合、ドライバーは次の操作を行います。
ドライバーのデバイス オブジェクトへのポインター WmiSystemControl 、 WMILIB_CONTEXT 構造体へのポインター、 および IRP へのポインタを渡して呼び出します。
WMILIB_CONTEXT 構造体は、登録するブロックの数 (GuidCount) を示し、対応するブロックに関連するGUID、インスタンス数、登録フラグを指定する WMIGUIDREGINFO 構造体のリスト (GuidList) を指します。 また、ドライバーの必須コールバック ルーチンと省略可能な DpWmiXxx コールバック ルーチンのエントリ ポイントも定義します。
WMI がドライバーの DpWmiQueryReginfo ルーチンを呼び出すと、ドライバーは、ドライバーのレジストリ パス、その MOF リソース名、そのすべてのブロックに関連する登録フラグ、およびドライバーのデータ ブロックのインスタンスに名前を付けるために WMI が使用する情報を指定します。これは、ドライバーの AddDevice ルーチンに渡される物理デバイス オブジェクトへのポインターか、静的インスタンス名をベースにする文字列のいずれかになります。
ドライバーは、 DpWmiXxx コールバックルーチンのエントリ ポイントを WMILIB_CONTEXT 構造体で初期化してから WmiSystemControlを呼び出す必要がありますが、 GuidCount と GuidList の WMILIB_CONTEXT 構造体の初期化はWMI がドライバの DpWmiQueryReginfo ルーチンを呼び出すまで延期できます。