ドライバーでの WMI サポートの初期化

[KMDF にのみ適用]

WMI データ ブロックをサポートするには、フレームワーク ベースのドライバーを次に示します。

  • Wmicore.mof で定義されていないカスタマイズされた WMI データ プロバイダーのマネージド オブジェクト形式 (MOF) リソース名を登録します。

  • 読み取りまたは書き込み可能なデータ ブロックを表す 1 つ以上の WMI インスタンス オブジェクトを作成します。

  • 必要に応じて、ドライバーが提供する WMI データを提供する 1 つ以上のイベント コールバック関数を実装します。

  • 各 WMI インスタンス オブジェクトを登録して、WMI クライアントで使用できるようにします。

WMI のサポートを初期化するには、KMDF ドライバーは、通常、 EvtDriverDeviceAdd または EvtDeviceSelfManagedIoInit コールバック内で、次の手順に従います。

  1. カスタマイズされた WMI データ プロバイダーをサポートする MOF ファイルを提供するドライバーは、データ プロバイダーを表す WMI プロバイダー オブジェクトを作成する前に 、WdfDeviceAssignMofResourceName メソッドを呼び出して MOF リソース名を登録する必要があります。

  2. WMI プロバイダー構成構造を初期化し、必要に応じて WMI プロバイダー オブジェクト (WDFWMIPROVIDER) を作成します。

  3. WMI インスタンス構成構造を初期化し、WMI インスタンス オブジェクト (WDFWMIINSTANCE) を作成します。

フレームワークは、KMDF ドライバーが最初の WMI インスタンスを作成するときに、既定で WMI プロバイダーを作成します。 そのため、ドライバーで必要な WMI プロバイダーが 1 つだけの場合、プロバイダー作成メソッド (WdfWmiProviderCreate) を呼び出す必要はありません。 ただし、この構造体は、インスタンスの作成時にフレームワークが使用するプロバイダーに関する情報を提供するため、ドライバーはプロバイダー構成構造を入力する必要があります。

ドライバーがサポートする各 WMI データ ブロックの 1 つのインスタンスを作成する場合、ドライバーは WdfWmiInstanceCreate を呼び出し、 WDF_WMI_PROVIDER_CONFIG 構造体と WDF_WMI_INSTANCE_CONFIG 構造体の両方を渡します。 この 1 回の呼び出しでは、フレームワークによって提供される単一の WMI プロバイダー オブジェクトが構成され、WMI インスタンス オブジェクトが作成されます。

ドライバーが WMI データ ブロックの複数のインスタンスを作成する場合、ドライバーは WdfWmiProviderCreateWdfWmiInstanceCreate の両方を呼び出す必要があります

プロバイダー インスタンスの登録

WMI クライアントがドライバーの WMI データ ブロックにアクセスするには、ドライバーがシステムの WMI サービスにプロバイダー インスタンスを登録する必要があります。 ドライバーは、次のいずれかの手法を使用してプロバイダー インスタンスを登録できます。

  • プロバイダー インスタンスのWDF_WMI_INSTANCE_CONFIG構造体の Register メンバーを TRUE に設定します

    ドライバーが RegisterTRUE に設定すると、デバイスが最初に動作 (D0) 状態に入ると、フレームワークによってインスタンスが自動的に登録されます。

  • WdfWmiInstanceRegister メソッドを呼び出します。

    ドライバーが WdfWmiInstanceCreate を呼び出した後 に WdfWmiInstanceRegister を呼び出す場合、フレームワークは、デバイスが動作 (D0) 状態の後にインスタンスを登録します。

フレームワークは、インスタンスのデバイスが削除されると ( EvtDeviceSelfManagedIoCleanup イベント コールバック関数を呼び出す前に) 各プロバイダー インスタンスの登録を自動的に解除します。 フレームワークがドライバーのコールバック関数を呼び出す順序については、「 PnP と電源管理のシナリオ」を参照してください。

ドライバーは 、WdfWmiInstanceDeregister を呼び出すことによって、いつでもインスタンスの登録を解除できます。