Share via


クラス プロバイダーの登録

WMI クラス プロバイダーを作成するには、__ClassProviderRegistration のインスタンスを使用して、プロバイダーを表す __Win32Provider インスタンスを登録する必要があります。 COM オブジェクトとして、プロバイダーはオペレーティング システムと WMI に登録する必要があります。 次の手順では、「プロバイダーの登録」の説明に従って、登録プロセスが既に実装されていることを前提としています。 プロバイダーが WMI リポジトリにほとんどのデータを格納し、そのデータが WMI 初期化時にのみ更新される場合は、クラスをプッシュ クラス プロバイダーとして登録します。 提供しているデータが頻繁に変更され、WMI からの要求ごとにコードによって動的に取得される場合は、プロバイダーをプル クラス プロバイダーとして登録します。

次の手順では、プッシュ クラス プロバイダーを登録する方法について説明します。

プッシュ クラス プロバイダーを登録するには

次の手順では、プル クラス プロバイダーを登録する方法について説明します。

プル クラス プロバイダーを登録するには

  1. プロバイダーを記述する __Win32Provider クラスのインスタンスを作成します。

  2. プロバイダーの機能セットを記述する __ClassProviderRegistration クラスのインスタンスを作成します。

    __ClassProviderRegistration インスタンス内:

    1. プロバイダーがプッシュ プロバイダーかプル プロバイダーかを示す InteractionType プロパティを設定します。

    2. Dynamic 修飾子と Provider 修飾子の両方でクラスにタグを付けます。

      Dynamic修飾子は、WMI がプロバイダーを使用してクラス インスタンスを取得する必要があることを通知します。 Provider 修飾子は、WMI で使用するプロバイダーの名前を指定します。

    3. ResultSetQueriesReferencedSetQueries、および UnsupportedQueries プロパティを定義します。

      これらのクエリ プロパティは、サポートされているクラスに関する詳細情報を記述します。

__ClassProviderRegistration クラスには、クラスのさまざまなサポートされているメソッドの記述に加えて、一連のクエリを記述する 3 つのプロパティもあります。 これら 3 つのプロパティを組み合わせて使用すると、クラス プロバイダーによって提供されるクラスの範囲全体が記述されます。 各クエリ プロパティには、サポートされているクラスの種類を指定するための、"スキーマ クエリ" と呼ばれる WQL SELECT ステートメントが含まれています。 スキーマ クエリは、meta_class と呼ばれる特別なクラス名を指定します。 次の表に、クエリのプロパティの一覧を示します。

プロパティ 説明
ResultSetQueries プロバイダーが提供する結果セットに関する情報が含まれます。 WMI はこの情報を使用して、アプリケーションからのクエリを満たすためにプロバイダーを呼び出すかどうかを決めます。 このプロパティは、プロバイダーが提供できるすべてのクラスのセットと使用可能なクラスのスーパーセットのいずれかを記述しますが、サブセットを記述することはありません。 WMI が必要とするのは、プロバイダーがこのプロパティに少なくとも 1 つのクエリを指定することです。
次の例は、プロバイダーが Win32_LogicalDisk クラスを参照する関連付けクラスを提供するときに ResultSetQueries を設定する方法を示しています。
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
次の例は、プロバイダーが提供するクラスが他の不明なクラスを参照するときに、一般的なクエリを指定する方法を示しています。
SELECT * FROM meta_class
次の例は、プロバイダーがサブクラスのみを提供し、特定のクラスの親クラスを提供しないときに ResultSetQueries を設定する方法を示しています。
SELECT * FROM meta_class WHERE __Dynasty = "MyClass"
次の例は、特別な __this プロパティを使用し、プロバイダーがすべてのクラスとサブクラスを提供するときに ResultSetQueries を設定する方法を示しています。
SELECT * FROM meta_class WHERE __this ISA "MyClass"
ReferencedSetQueries 関連付けと参照が要求されているスキーマ クエリでプロバイダーをバイパスするかどうかを決定します。 関連付けクラスを提供できるプロバイダーは、ReferencedSetQueries プロパティに少なくとも 1 つのクエリを含める必要があります。
UnsupportedQueries クラス プロバイダーが提供しない結果セットに関する情報が含まれます。 WMI はこのプロパティを使用して、ResultSetQueries によって暗示されるクラスのセットから減算します。 たとえば、クラス プロバイダーは、ResultSetQueries で MyClass から派生したすべてのクラスのサポートを指定し、UnsupportedQueries で 1 つの特定の派生クラスのサポート不足を指定できます。
プロバイダーがそのクエリ処理機能について登録できる情報が多いほど、実行速度が速くなります。 UnsupportedQueries プロパティに 1 つ以上のクエリを入力するのは具体的な方法の 1 つであり、特に重要なのは、プロバイダーが依存しているクラスをプロバイダーが提供しないときです。 UnsupportedQueries プロパティのクエリにリストされているクラスに対して要求が行われると、WMI はクラス自体を提供するか、代替プロバイダーを呼び出してそれを提供できます。

WMI は OR 句をサポートしていないため、クラスごとに別個のクエリを作成する必要があります。

クラス プロバイダーが MyClass1、MyClass2、および MyClass3 を提供すると ResultSetQueries で次のクエリが指定されます。

SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"

__Win32Provider および __ClassProviderRegistration のインスタンスを作成することによってプロバイダーを登録または削除できるのは管理者のみです。