次の方法で共有


WMI 内での階層の作成

WMI 名前空間 は、クラスとインスタンスのセットのスコープを定義するプログラミング オブジェクトです。 WMI プロバイダー クラスは、名前空間内で定義する必要があります。

名前空間は、SMS 環境など、さまざまなマネージド環境を表します。 スキーマのクラスとインスタンスはマネージド環境のコンポーネントを定義するため、新しいスキーマごとに新しい名前空間が必要です。 たとえば、root\cimv2 名前空間には、Win32 スキーマで定義されているクラスとインスタンス、および Win32 スキーマが継承する親共通情報モデル (CIM) クラスが含まれます。 CIM クラスは、分散管理タスク フォース (DMTF) によって定義されます。

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

 

WMI は、__Namespace システム クラスまたは __Namespace から派生する任意のクラスのインスタンスとして名前空間 定義します。 __Namespace システム クラスには、Name という名前の 1 つのプロパティがあり、親名前空間のスコープ内で一意である必要があります。 Name プロパティには、文字で始まる文字列も含まれている必要があります。 文字列内の他のすべての文字には、文字、数字、またはアンダースコアを使用できます。 すべての文字は大文字小文字を区別しません。

親 WMI 名前空間は、子名前空間の一意の名前を決定するだけでなく、クラスの静的インスタンスを他のプロバイダーによる誤った変更から保護できます。 たとえば、別のプロバイダーの既存の名前空間の下に新しい名前空間を入れ子にすると便利な場合があります。 ただし、元のプロバイダーは、新しいスキーマと一致するようにすべてのクラス インスタンスを更新しようとする場合があります。 その際、元のプロバイダーは名前空間内のすべてのサブ子を削除できます。 これはターゲット名前空間に適したアクションですが、子名前空間 (つまり、独自のプロバイダー クラス) 内の関連のないクラス インスタンスに影響する可能性があります。

そのため、通常は、直接制御しない名前空間とは別に名前空間を作成して登録することをお勧めします。 これは、クラスが一般的な CIM クラスまたは会社の他のクラスからのみ派生する場合に特に当てはまります。 名前空間は、次のような ルート 名前空間の下に置くことができます。

Root/myCompany/myProduct

これに対し、新しいクラスが別のプロバイダーのクラスから派生している場合は、そのプロバイダーのサブ名前空間にクラスを格納する必要があります。 これにより、新しいクラスが元のプロバイダーによって誤って削除される可能性があることに注意してください。

WMI には、名前空間を作成するためのさまざまな方法が用意されています。

マネージド オブジェクト形式 (MOF) クラスの設計