次の方法で共有


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

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

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

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

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

    ドライバーが RegisterTRUEに設定する場合、フレームワークは、デバイスが初めて動作 (D0) 状態に入ると、自動的にインスタンスを登録します。

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

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

フレームワークは、インスタンスのデバイスが取り外されるとき (そしてEvtDeviceSelfManagedIoCleanup イベント コールバック関数を呼び出す前に) 各プロバイダー インスタンスの登録を自動的に解除します。 フレームワークがドライバーのコールバック関数を呼び出す順序については、PnP and Power Management Scenariosをご参照ください。

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