マネージド オブジェクト フォーマット (MOF) クラスの設計
WMI プロバイダーは、マネージド オブジェクト形式 (MOF) ファイルと DLL ファイルで構成されます。 MOF ファイルは、プロバイダー実装がデータを提供するクラスを定義します。
MOF クラス定義は、mofcomp ユーティリティによってコンパイルされ、WMI リポジトリ (Common Information Model (CIM) リポジトリとも呼ばれます) に格納されます。 クラスを作成するあまり一般的でない方法は、WMI 用 COM API のメソッドを使用することです。
注意
WMI に障害が発生して再起動した場合に、マネージド オブジェクトのすべての WMI クラス定義が "WMI リポジトリ" に復元されるようにするには、MOF ファイルで #pragma autorecover プリプロセッサ命令を使用します。
このトピックでは次のセクションを扱います。
管理するオブジェクトの定義
管理する企業の部分を特定したら、管理するオブジェクトを定義します。 定義には必要なデータが含まれていて、関連するビジネス ルールを正確に実装できるようにならなければなりません。 オブジェクトを詳細レベルで定義することはできますが、ベストなのは定義に含まれる詳細のレベルと、役に立つ十分な詳細を提供する必要性の判別ができることです。 プロセスの早い段階で近道すると、時間を節約できるかもしれませんが、将来の仕事が増えるかもしれません。
Distributed Management Task Force (DMTF) Web サイトの CIM チュートリアルには、設計プロセスに関する優れた情報が含まれています。 詳細については、www.dmtf.org を参照してください。
スキーマ設計を開発して実装するときは、次の要素を考慮してください。
修飾子
修飾子が提供する、クラス、オブジェクト、プロパティ、メソッド、パラメーターを記述する方法は、クラスとプロパティの定義に適用されます。 MOF コードでは、修飾子は角かっこで囲まれており、たとえば [key] や [association] があります。 詳細については、「修飾子の追加」と「WMI 修飾子」を参照してください。
名前空間
名前空間は、クラスとオブジェクトをグループ化し、スコープと可視性を制御するための論理ユニットです。 通常、名前空間には、特定の環境のマネージド オブジェクトを表すクラスとオブジェクトのセットが含まれます。 詳細については、「WMI 内での階層の作成」を参照してください。
Object
モデル化されたオブジェクトは、スキーマの物理要素であったり、論理要素であったりします。 たとえば、ハード ディスク ドライブのような物理ディスク ドライブや、物理ディスク上のパーティションとなる論理ディスクをモデル化できます。 クラスを使用して物理ディスク ドライブをモデル化し、そのクラスを拡張して論理ディスクをモデル化する設計は、ディスクの種類ごとに別個のクラスを作成しようとする設計よりも拡張性に優れます。
Data
データは動的でも静的でもかまいません。 データが動的な場合は、そのデータ用のクラス プロバイダーを作成する必要があります。
ユーザーがデータを変更できるようにするには、ユーザーが呼び出すメソッドを使用した場合のみプロパティを直接書き込み可能や変更可能にしたいのかどうかを決めなければなりません。
プロパティまたはメソッドの定義
一般に、WMI クラスプロパティは C++ クラスのプロパティに似ています。 データの一部に対してコードが実装する唯一のアクションが値の取得や値の設定である場合は、データを WMI クラスのプロパティとして定義する必要があります。
WMI メソッドが、通常はマネージド オブジェクトの状態を変更するアクションを実行します。 たとえば、アクションがハードウェア オブジェクトの操作を有効または無効にする場合は、読み取り/書き込みプロパティを作成する方法が推奨されます。 ハードウェアの状態を表示するプロパティを作成することもできます。
クラスやインスタンスを作成するときに、コメントを含めることができます。 この手法を使用してクラスを記録したり、プログラミング手法を説明したりします。 詳細については、「コメントの作成」を参照してください。 さらに、データ オブジェクトの目的を修飾するためのデータ を追加することができます。 詳細については、「修飾子の追加」を参照してください。
オブジェクトを相互に関連付ける
オブジェクトを相互に関連付けるには、個別のオブジェクトとそれらを関連付ける関連付けオブジェクトを作成する方法と、あるオブジェクトを他のオブジェクトに埋め込む方法の 2 つがあります。 CIM は埋め込みオブジェクトをサポートしていないため、CIM に準拠するには、最初の方法を使用する必要があります。 ただし、WMI では埋め込みオブジェクトがサポートされているため、いずれかの方法を使用してオブジェクト間の関係を表しましょう。 埋め込みオブジェクトの例については、「Win32 クラス」を参照してください。 たとえば、Win32_SecurityDescriptor の埋め込みオブジェクト Win32_ACE には、別の埋め込みオブジェクト Win32_Trustee があります。
オブジェクト間の関係を表す方法を決めるときは、次の点を考慮してください。
- インスタンス自体が役に立つ場合は、関連付けが最も効果的です。 たとえば、Win32_Process と Win32_UserAccount です。 詳細については、「関連付けクラスの宣言」を参照してください。
- インスタンスが親オブジェクトの外に存在しない場合は、埋め込みオブジェクトが最も効果的です。 たとえば、Win32_SecurityDescriptor と Win32_ACE です。 詳細については、「クラスにオブジェクトを埋め込む」を参照してください。
関連トピック