WMI 内での階層の作成

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

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

注意

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

 

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

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

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

Root/myCompany/myProduct

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

WMI には、名前空間を作成するいくつかの異なる方法が用意されています。

マネージド オブジェクト フォーマット (MOF) クラスの設計