WMI プロバイダーの開発

プロバイダーは、WMI とマネージド オブジェクトの間の仲介として機能するコンポーネント オブジェクト モデル (COM) オブジェクトです。 たとえば、アプリケーションまたはスクリプトが WMI Win32_LogicalDisk クラスを使用してディスク データを要求すると、データはプレインストールされた Win32 プロバイダーを介して動的に取得されます。

WMI 経由で他のアプリケーションにデータを提供する場合は、COM サーバーを作成するか、Visual Studio の WMI ATL ウィザードを使用して、アンマネージド コード プロバイダーを作成できます。 マネージ コード プロバイダーを作成するには、.NET Framework で WMI を使用します。 このセクションのトピックでは、アンマネージド COM プロバイダーを作成するプロセスについて説明します。

注意

WMI に障害が発生して再起動した場合に、マネージド オブジェクトのすべての WMI クラス定義が "WMI リポジトリ" に復元されるようにするには、マネージド オブジェクト フォーマット (MOF) ファイルで #pragma autorecover プリプロセッサ命令を使用します。

プロバイダーは、マネージド オブジェクト フォーマット (MOF) スキーマで定義されたクラスと、プロバイダーの機能を実行する DLL ファイルで構成されます。 たとえば、Win32 プロバイダーのクラスを定義する MOF は CIMWin32.mof、DLL はCIMWin32.dll であり、どちらも %windir%\System32\Wbem にあります。

プロバイダーの MOF スキーマには、いくつかの種類のプロバイダーが含まれている場合があります。 たとえば、イベント ログ プロバイダーには、Ntevt.mof という名前の 1 つの MOF ファイルにインスタンス、メソッド、およびイベントという種類のプロバイダーがあります。 関連プロバイダーのすべてのクラスと登録スキーマは、クラスごとに 1 つのファイルを作成するのではなく、1 つのファイルにまとめることをお勧めします。

プレインストールされたプロバイダーを使用するだけでなく、独自のプロバイダーを作成して、ハードウェア デバイスやソフトウェアの操作に関する情報を提供することもできます。

次の表に、プロバイダーを作成するための基本的なタスクをリストしています。

タスク 説明
マネージド オブジェクト フォーマット (MOF) クラスの設計 WMI を使用して管理するエンティティのモデルを開発し、スキーマについて記述するマネージド オブジェクト フォーマット (MOF) ファイルを作成します。
プロバイダーを作成して WMI にデータを提供する WMI に結合される最も基本的なプロバイダーを作成します。
アプリケーションへのプロバイダーの組み込み プロバイダーが常時稼働しない場合は、アプリケーション内のコンポーネントとしてプロバイダーを組み込みます。
プロバイダーの登録 プロバイダーを COM と WMI に登録します。
プロバイダーの初期化 IWbemProviderInit および IWbemProviderInitSink インターフェイスを実装します。
WMI に対する呼び出しの実行 プロバイダーから WMI インターフェイスを呼び出します。
クライアントの偽装 クライアント アプリケーションにアクセスするためのセキュリティを設定します。
プロバイダーの更新 必要に応じてプロバイダーを改善します。
プロバイダーのアンロード シャットダウン中またはプロバイダーがアイドル状態のときに、メモリからプロバイダーを削除します。
プロバイダーのデバッグおよびプロバイダー構成とトラブルシューティング クラス WMI によって提供される機能を使用してプロバイダーをデバッグします。
64 ビット コンピューターでのデータの取得と提供 32 ビット アプリケーション互換性プロバイダーが必要かどうか、または 64 ビット プロバイダーが両方のクライアントにデータを提供できるかどうかを評価します。

以下のトピックでは、さまざまな種類のプロバイダーを作成するために必要な手順について説明します。