Microsoft Windows Management Instrumentation (WMI) テクノロジは、分散管理タスク フォース (DMTF) が提唱する Web-Based Enterprise Management (WBEM) の Microsoft 版の実装であり、Common Information Model (CIM) を拡張し、Windows ベースの管理環境における管理オブジェクトを表現できるようにしたものです。DMTF の標準規格でもある CIM は、管理された環境において、一貫性、統一性のある方法で管理オブジェクトを論理的に構成するための拡張可能なデータ モデルです。
WBEM は DMTF が推進するテクノロジで、CIM を基盤とします。WBEM によって管理インフラストラクチャの標準が確立され、エンタープライズ環境におけるさまざまなハードウェアおよびソフトウェア管理システムの情報にアクセスするための標準化された方法が提供されます。開発者は WBEM 標準を使用して、企業における管理の複雑さおよびコストを低減させるためのツールや、各種の技術を開発できます。WBEM はこのような標準を提供することで、総保有コスト (TCO) の削減を目指す業界全体の努力に貢献しています。TCO とは、コンピューターのハードウェアおよびソフトウェアの購入、展開、構成、ハードウェアおよびソフトウェアの更新、教育、保守、技術サポートに関連する管理コストを指します。
WBEM によって、管理ソースのデータにアクセスするための統合ポイントが提供され、簡易ネットワーク管理プロトコル (SNMP)、デスクトップ管理インターフェイス (DMI)、共通情報管理プロトコル (CMIP) などの既存の管理プロトコルおよびインストルメンテーションが補完、拡張されます。
Windows Management Instrumentation テクノロジ
Windows Management Instrumentation (WMI) テクノロジは、CIM、管理オブジェクト フォーマット (MOF)、および共通プログラミング インターフェイスの構文をサポートする管理インフラストラクチャです。MOF 構文は、CIM スキーマの構造とコンテンツを、人間にもコンピューターにも読み取り可能な形式で定義するものです。WMI では、クエリを使った情報取得、イベント通知など、一連の強力なサービスが提供されます。これらのサービスと管理データには、共通オブジェクト モデル (COM) プログラミング インターフェイスからアクセスできます。WMI スクリプト インターフェイスでは、スクリプト機能もサポートされます。
WMI テクノロジで提供される機能は次のとおりです。
-
統一された共通のインターフェイスを使って、基盤のインストルメンテーション メカニズムに関係なく、あらゆる管理対象オブジェクトを監視、操作、制御する機能。WMI はアクセス メカニズムとして使用できます。
-
Windows オペレーティング システムの操作、構成、状態の一貫したモデル。
-
すべての管理情報に対する単一のアクセス ポイントを提供する COM アプリケーション プログラミング インターフェイス (API)。
-
他の Windows 管理サービスとの相互運用性。これにより、綿密に設計された統合管理ソリューションを構築する手順を簡略化できます。
-
柔軟で拡張可能なアーキテクチャ。開発者は、WMI プロバイダーと呼ばれるコード モジュールを記述して情報モデルを拡張し、新しいデバイスやアプリケーションなどに対応することができます。
-
Windows Driver Model (WDM) に対する拡張機能。インストルメンテーション データおよびイベントを、デバイス ドライバーやカーネル側のコンポーネントからキャプチャ可能にします。
-
強力なイベント アーキテクチャ。これにより、管理情報の変化について、識別や集計を行ったり、他の管理情報との比較または関連付けを行うことが可能になります。また、このような管理情報の変化を、ローカルまたはリモートの管理アプリケーションに転送することもできます。
-
情報モデルの詳細なクエリを可能にする高度なクエリ言語。
-
開発者が管理アプリケーションの作成に使用できる、スクリプトによる実行が可能な API。スクリプト API は、Microsoft Visual Basic、Visual Basic for Applications (VBA)、Visual Basic Scripting Edition (VBScript)、Microsoft JScript 開発ソフトウェアなどの、複数の言語に対応しています。開発者は VBScript や JScript だけでなく、Microsoft ActiveX スクリプト技術をサポートする任意のスクリプト言語実装 (Perl スクリプト エンジンなど) をこの API で使用できます。さらに、このインターフェイスを使用すると、Windows スクリプト ホストや Microsoft Internet Explorer を使ってスクリプトを記述できます。Windows スクリプト ホストは、Internet Explorer と同様に ActiveX スクリプト エンジンのコントローラー エンジンとして機能し、VBScript および JScript で記述されたスクリプトに対応します。
WMI アーキテクチャの概要
WMI テクノロジ アーキテクチャの構成要素は次のとおりです。
-
管理インフラストラクチャ - CIM オブジェクト マネージャーを備えており、管理データへの一貫したアクセス方法と、CIM オブジェクト マネージャー リポジトリと呼ばれる管理データの中央格納場所をアプリケーションへ提供します。
-
WMI プロバイダー - CIM オブジェクト マネージャーと管理対象オブジェクトの間の仲介役として機能します。プロバイダーでは、WMI API を使用して、管理対象オブジェクトからのデータを CIM オブジェクト マネージャーに提供したり、管理アプリケーションに代わって要求を処理したり、イベント通知を生成します。
管理インフラストラクチャは、CIM オブジェクト マネージャーと CIM オブジェクト マネージャー リポジトリで構成されます。アプリケーションでは、オブジェクト マネージャーに依存して、管理アプリケーションとデータ プロバイダー間のインターフェイスを処理します。WMI は、COM を使用して共通プログラミング インターフェイスを Windows 管理サービスに提供することで、管理アプリケーションとデータ プロバイダー間の通信をサポートします。この COM API によって、イベント通知とクエリ処理サービスが提供されます。この API は、C や C++ などのプログラミング言語環境で使用できます。CIM オブジェクト マネージャー リポジトリには、CIM スキーマおよび拡張スキーマと、データ情報またはデータ ソースの詳細が格納されます。管理アプリケーションから管理対象オブジェクトに対するサービス要求が発生すると、このリポジトリのスキーマ データが、CIM オブジェクト マネージャーによって使用されます。
管理対象オブジェクトは、CIM を使用してモデル化された物理的または論理的なエンタープライズ コンポーネントです。管理対象オブジェクトの例としては、ケーブルなどのハードウェアや、データベース アプリケーションなどのソフトウェアがあります。管理アプリケーションは CIM オブジェクト マネージャーを介して管理対象オブジェクトにアクセスできます。
管理アプリケーションは、管理対象オブジェクトからの情報を使用し、処理するアプリケーションまたは Windows サービスです。管理アプリケーションは、WMI API のメソッドの 1 つを使用して CIM オブジェクト マネージャーに要求を送信することで、管理対象オブジェクトの情報にアクセスできます。
WMI プロバイダーは、標準の COM および分散コンポーネント オブジェクト モデル (DCOM) のサーバーであり、管理対象オブジェクトと CIM オブジェクト マネージャーの間の仲介役として機能します。CIM オブジェクト マネージャーが管理アプリケーションから受け取った要求が、CIM オブジェクト マネージャー リポジトリから利用できないデータに関するものであった場合や、CIM オブジェクト マネージャーでサポートされていないイベント通知に対するものであった場合、要求は WMI プロバイダーに転送されます。プロバイダーは、プロバイダーの特定のドメインに属する固有の管理対象オブジェクトに対して、データおよびイベント通知を提供します。
プロバイダーを実装するには、サポートされるサーバーの種類のうち 1 つを使用する必要があります。サポートされるサーバーの種類は次のとおりです。
・ローカルまたはリモートの Microsoft Windows 2008 サービス
・ローカルまたはリモートにある標準の実行可能ファイル (.exe ファイル)
・インプロセス ダイナミック リンク ライブラリ (DLL)
推奨されるサーバーの種類は、ローカルまたはリモートの Windows 2008 サービスと標準の実行可能ファイルです。
WMI には、システム レジストリなどのソースからのデータを提供する組み込みプロバイダー (標準のプロバイダー) が付属しています。組み込みプロバイダーには次のものがあります。
-
Active Directory プロバイダー - Active Directory サービスに格納されているすべての情報へのゲートウェイとして動作します。このプロバイダーにより、WMI と Active Directory の両方の情報に、単一の API でアクセスできます。
-
Windows インストーラー プロバイダー - このプロバイダーにより、Windows インストーラー、およびソフトウェアのインストールを WMI から完全に制御できます。Windows インストーラーでインストールされたアプリケーションであれば、どのアプリケーションの情報も利用できます。
-
パフォーマンス カウンター プロバイダー - 未処理のパフォーマンス カウンター情報を公開します。この情報は、システム モニター ツールに表示されるパフォーマンス値を計算するために使用されます。システムにインストールされているパフォーマンス カウンターは、自動的にこのプロバイダーで表示可能になります。
-
レジストリ プロバイダー - レジストリ キーの作成、読み取り、書き込みを可能にします。指定されたレジストリー キーが変更されたときに、WMI イベントを生成できます。
-
SNMP プロバイダー - 簡易ネットワーク管理プロトコル (SNMP) を使用して管理されているシステムおよびデバイスへのゲートウェイとして動作します。SNMP MIB オブジェクト変数の読み取りおよび書き込みが可能です。SNMP トラップを自動的に WMI イベントにマップできます。
-
イベント ログ プロバイダー - このプロバイダーにより、Windows Server 2008 イベント ログのデータおよびイベント通知にアクセスできます。
-
Win32 プロバイダー - オペレーティング システム、コンピューター システム、周辺機器、ファイル システム、およびセキュリティに関する情報を提供します。
-
WDM プロバイダー - ユーザー入力デバイス、記憶装置、ネットワーク インターフェイス、および通信ポートに関する、低レベルの Windows Driver Model ドライバー情報を提供します。
-
ビュー プロバイダー - このプロバイダーにより、既存のクラスから新しい集計クラスを構築できます。ソース クラスから必要な情報だけを抽出したり、複数クラスからの情報を 1 つのクラスにまとめたり、複数コンピューターからのデータを 1 つのビューに集計することが可能です。
WMI テクノロジでは、サード パーティのカスタム プロバイダーに対するサポートも提供されます。カスタム プロバイダーを使用して、環境固有の管理対象オブジェクトに関連した要求を処理することができます。プロバイダーは通常、MOF 言語を使用してクラスの定義と作成を行い、WMI API を使用して、CIM オブジェクト マネージャー リポジトリへのアクセスと、アプリケーションから発行された CIM オブジェクト マネージャーの要求への応答を行います。
簡易ネットワーク管理プロトコルの概要
簡易ネットワーク管理プロトコル (SNMP) はネットワーク管理の標準であり、TCP/IP ネットワークの管理方法は SNMP によって定義されています。
SNMP では次の要素を含む分散アーキテクチャが使用されます。
-
複数の管理対象ノード。それぞれのノードには、管理インストルメンテーションへのリモート アクセスを提供する "エージェント" と呼ばれる SNMP エンティティが 1 つ含まれます。
-
1 つ以上の SNMP エンティティ。"マネージャー" と呼ばれ、管理対象要素を監視および制御する管理アプリケーションを実行します。管理対象要素にはホストやルータなどのデバイスがあります。これらの管理情報にアクセスして、管理対象要素の監視や制御を行います。
-
管理プロトコルとしての SNMP。SNMP は、管理ステーションとエージェントの間で管理情報を受け渡すために使用されます。管理情報とは、管理情報ベース (MIB) と呼ばれる仮想インフォメーション ストアに格納されている管理対象オブジェクト全体を指します。
SNMP メッセージ
管理システムとエージェントでは、SNMP メッセージを使用してホスト情報を交換します。これらのメッセージはユーザー データグラム プロトコル (UDP) によって送信され、インターネット プロトコル (IP) を使用して管理システムとホストの間をルーティングされます。
管理情報ベース (MIB) には、管理システムから要求される情報が格納されています。たとえば、ネットワークに接続されたコンピューターの MIB にはネットワーク インターフェイス カードの構成とパフォーマンス、利用可能なハード ドライブの容量、ドライバーとアプリケーションのバージョンなどに関する情報が格納されています。追加の MIB を記述して読み込み、収集するよう指定されたデータを公開することができます。ただし、要求された情報の収集が、システム自体でサポートされている必要があります。
情報要求の処理
管理システムから情報が要求されると、次の順序で処理が行われます。
-
管理システムからエージェントに、エージェントの IP アドレスを使って要求が送信されます。
-
エージェントは SNMP データグラムを形成します。このデータグラムには、SNMP メッセージと、管理システムが属しているコミュニティ名が含まれます。
-
SNMP エージェントがデータグラムを受け取り、コミュニティ名を確認します。コミュニティ名が有効な場合、SNMP エージェントは適切なデータを抽出します。コミュニティ名が有効でない場合、要求は拒否されます。エージェントが認証トラップを送信するよう構成されている場合は、トラップ メッセージが送信されます。
-
SNMP データグラムと共に、要求された情報が管理システムに返されます。
メッセージ
次の種類の SNMP メッセージが使用されます。
-
Get - 要求メッセージです。SNMP 管理システムは Get メッセージを使用して、SNMP エージェントに対し MIB エントリに関する情報を要求します。
-
Getnext - 要求メッセージの 1 つです。管理対象オブジェクトのツリー全体を参照するために使用します。
-
Getbulk - 要求メッセージの 1 つです。エージェントがメッセージ サイズの制限内でできるだけ多くのデータを転送するよう指定します。
-
Set - 更新された MIB 値をエージェントに送信し割り当てるために使用します。
-
Notify (または Trap) - 要求とは無関係に送信されるメッセージです。特定の種類のイベントが管理対象ホスト上でローカルに発生したことをエージェントが検出した場合に、エージェントから SNMP 管理システムに送信されます。
SNMP イベント (またはトラップ) は、イベントをフィルターする管理ステーションに一方的に送信されるため、ネットワーク トラフィックが発生します。WMI を使用すると、イベントはローカルでフィルターされ、フィルター基準を満たすイベントだけがネットワークに送信されるので、イベントの送信に必要な帯域幅を節約できます。
SNMP に対する WMI SDK サポート
SNMP プロバイダーには、次のコンポーネントが含まれています。
-
クラス プロバイダー、インスタンス プロバイダー、イベント プロバイダー。これらのプロバイダーにより、SNMP 情報のモデル化と処理が WMI に統合されます。これらの各 SNMP プロバイダーでは、オブジェクト値の集合と CIM クラス インスタンスのプロパティ値のマッピングが行われます。
-
SNMP 情報モジュール コンパイラ。ネイティブの SNMP スキーマ情報を、CIM が使用する形式にコンパイルします。
SNMP プロバイダー
SNMP プロバイダーは、動的な情報を返します。インスタンス プロバイダーで使用するクラス セットは、次のいずれかの方法で指定できます。
-
静的 - プロキシ デバイスに関連付けられている CIM オブジェクト リポジトリ名前空間内にクラスを作成して指定する方法。
-
動的 - SNMP クラス プロバイダーを使用して指定する方法。この方法では、SNMP モジュール情報リポジトリ (SMIR) 名前空間内に位置するクラス セットが返されます。
さらに、SMIR 名前空間から返されるクラス セットに対して相関関係を使用するかどうかも指定できます。相関関係のあるクラスによって、クラス セットが定義されます。このクラス セットでは、列挙操作が行われた時点で指定の SNMP エージェントからのサポートを受けることが明確になっています。相関関係のない列挙操作では、エージェント デバイスによってサポートされるかどうかに関係なく、SMIR 名前空間内に存在するすべてのクラスが返されます。
SNMP プロバイダーには次のものがあります。
-
SNMP クラス プロバイダーおよびインスタンス プロバイダー。SNMP デバイスに関連するデータにアクセスしてデータを変更するために、アプリケーションで使用されます。
-
SNMP イベント プロバイダー。SNMP トラップおよび通知からイベントを生成します。これらのプロバイダーは同じ種類のイベントを報告しますが、カプセル化 (Encapsulated) と指示 (Referent) という異なる形式で報告します。カプセル化の場合、イベント クラスのプロパティは単純で、TRAP-TYPE マクロや NOTIFICATION-TYPE マクロから直接マップされた情報が記述されます (マクロについては次の項で説明します)。指示クラスの場合、マクロ内の情報が抽象化されるため、同じクラスおよびインスタンスを共有するプロパティは埋め込みオブジェクトとして表現されます。こうすると __RELPATH を抽出できるので、トラップが関連付けられている一意のインスタンスをイベントの受信後に取得できるようになります。形式を選択するには、コンシューマーを特定のイベント クラスに登録します。
CIM クラスへのデバイス データのマッピング
SNMP プロバイダーは、次の方法によりデバイス データを CIM クラスにマップします。
-
SNMP クラス定義を列挙する。一連のクラス定義を列挙するには、アプリケーションで IWbemServices::CreateClassEnum または IWbemServices::CreateClassEnumAsync を呼び出します。
MIB オブジェクトは OBJECT-TYPE マクロによって SNMP CIM クラスにマップされます。イベントは TRAP-TYPE および NOTIFICATION-TYPE マクロによってクラスにマップされます。
OBJECT-TYPE マクロは MIB オブジェクトの基本的な特性を記述するために使用します。SNMPv1 TRAP-TYPE マクロおよび SNMPv2C NOTIFICATION-TYPE マクロは SNMP イベントの特性を記述します。
-
SNMP クラス定義をインスタンス化する。クラス定義をインスタンス化するには、アプリケーションで IWbemServices::GetObject または IWbemServices::GetObjectAsync を呼び出します。
-
SNMP クラス インスタンスを列挙する。SNMP インスタンス プロバイダーは、デバイス MIB を表すクラスに関連付けられているインスタンスを列挙するための要求を処理します。
-
SNMP クラス インスタンスをインスタンス化する。SNMP インスタンス プロバイダーは、MIB オブジェクトを表すクラスのインスタンスをインスタンス化するための要求を処理します。
-
SNMP クラス インスタンスを取得する。SNMP CIM クラスの特定インスタンスを取得するには、アプリケーションで IWbemServices::GetObject または IWbemServices::GetObjectAsync を呼び出します。
SNMP と CIM スキーマ
SNMP でオブジェクトの定義に使用されるスキーマは、WMI Common Information Model で使用されるスキーマとは異なります。SNMPv1 および SNMPv2 スキーマは管理情報構造 (SMI) と呼ばれ、MIB ファイルとしてパッケージ化されます。オブジェクトを定義するために、MIB ファイルでは標準言語である抽象構文記法 1 (ASN.1) と、マクロ定義を使用します。マクロ定義はオブジェクト記述のテンプレートとして使用されます。これらのマクロでは、オブジェクトの名前、識別子、構文、説明、アクセス権などの情報が提供されます。
WMI SNMP プロバイダーでは次の MIB マクロが変換されます。
-
OBJECT-TYPE - オブジェクトの名前、構文、アクセス権など、オブジェクトの基本的な特性を記述します。SNMPv1 および SNMPv2C で使用されます。
-
TEXTUAL-CONVENTION - 既存のデータ型に、名前と、場合によっては値の範囲を割り当てます。SNMPv2C のみで使用されます。
-
TRAP-TYPE - イベント メッセージ (トラップ) を記述します。SNMPv1 のみで使用されます。
-
NOTIFICATION-TYPE - イベント メッセージ (通知) を記述します。SNMPv2C のみで使用されます。
SNMP クラス プロバイダーは、CIM 名前空間に対してクラス定義のセットの列挙とインスタンス化を行います。この処理には、MIB 相関係数と、SNMP スキーマ データベースである SNMP モジュール情報リポジトリが使用されます。SNMP クラス プロバイダーでサポートされるモードは、相関モードおよび非相関モードです。これらのモードを設定するには、相関をブール型で設定したコンテキスト値 (IWbemContext) を IWbemServices メソッドに渡します。SNMP クラス プロバイダーは、クラス定義の列挙とクラス定義の取得の両方をサポートします。
SNMP インスタンス プロバイダーは、SNMP MIB オブジェクトをクラス インスタンスにマップします。
SNMP 名前空間
SNMP 名前空間は、ネットワーク デバイスのビューの定義に使用されます。SNMP 名前空間を作成する場合は、WMI SDK の WMI Common Information Model (CIM) Studio アプリケーションを使用するか、MOF ファイルをコンパイルするか、またはプログラムで WMI API を使用します。
SNMP 名前空間は、Namespace システム クラスを使用して表されます。新しい名前空間を生成するには、このクラスのインスタンスを作成します。クラス インスタンスには、記述子 (または修飾子) を少なくとも 1 つ関連付ける必要があります。修飾子には、実装固有のコンテキスト情報と、SNMP プロバイダーから SNMP エージェントへのアクセス方法を定義するトランスポート プロパティが含まれます。
SNMP デバイスの表現
WMI 内では、一連のインスタンス修飾子が含まれたプロキシ名前空間を使用して SNMP デバイスを表します。これらの修飾子には、デバイス特有のトランスポート特性が記述されています。WMI では snmpreg.mof という MOF ファイルを使用して、名前空間 \\.\root\snmp\localhost が作成されます。これはローカル SNMP エージェントを表す標準の名前空間です。
SNMPv2C
SNMPv2C は、WMI のコンテキスト内でサポートされます。SNMPv2C の当初の目的は、より強力なセキュリティ コンテキストを SNMP に提供することでした。このバージョンでは、単純で安全度の低いパスワード ベースの認証機能が採用されています。この機能はコミュニティ機能として知られており、SNMPv1 で提供される機能です。SNMPv2 SMI では、コミュニティ セキュリティに一定の追加と拡張が行われました。ビット文字列、ネットワーク アドレス、SNMPv1 SMI 固有のデータ型に対応するカウンターなどがその例です。さらに SNMPv2 SMI では情報モジュールが定められています。このモジュールでは、関連する定義グループを指定します。SNMPv2 では、新しいプロトコル操作として GetBulk と Inform も定義されています。
セキュリティ
WMI のセキュリティでは、ローカル コンピューターとリモート アクセスの両方に対して、ユーザーのログオン情報が確認されます。認証されたユーザーは、何らかの制限が与えられた状態で CIM リポジトリ全体にアクセスできるようになります。現在のリリースの WMI では、個々のクラスやインスタンスなどのシステム リソースに対してセキュリティは提供されません。ただし、管理者が WMI を使用してスキーマ操作に対するグローバル アクセス許可を制御することはできます。たとえば、一部のユーザーには読み取り専用の操作だけにアクセスできるようにすることが可能です。WMI では名前空間ごとのセキュリティもサポートされます。また、SNMP プロバイダーでは、SNMPv2C でのセキュリティ強化を含むすべての SNMP ベースのセキュリティに対するサポートも提供されます。
SNMP 情報モジュール コンパイラ
SNMP 情報モジュール コンパイラは、MIB で定義されているネイティブの SNMP 管理情報を、SNMP プロバイダーで使用可能な同等の CIM スキーマ定義にコンパイルするために使用されます。CIM スキーマは、MOF ファイル内に出力されるか、SNMP スキーマ データベース (SNMP モジュール情報リポジトリ (SMIR)) 内に読み込むことができます。SNMP 動的クラス プロバイダーでは、SNMP モジュール情報リポジトリを使用して、クラス定義のインスタンスの作成および取得が行われます。
SNMP 情報モジュール コンパイラは、コマンド ライン モードで実行可能ファイルとして動作します。1 つの SNMP 情報モジュールを入力として使用し、外部参照の解決に必要な追加ファイルがあればそのファイルも使用します。SNMP 情報モジュールは管理情報の集まりで、通常は MIB モジュールの組み合わせと、AGENT-CAPABILITIES および MODULE-COMPLIANCE ステートメントで構成されます。AGENT-CAPABILITIES ステートメントは、オブジェクトの定義に関するエージェントの能力を記述します。MODULE-COMPLIANCE ステートメントは、エージェントがサポートする MIB モジュールのセットに対する、エージェントの準拠の程度を記述します。
SNMP 情報モジュール コンパイラでは、次の機能も提供されます。
-
情報モジュールに対する操作チェックを実行する。たとえば、ローカルの構文や外部参照を従属モジュールの情報と照合します。
-
以前に読み込まれたすべてのデータを SMIR から削除する、または、1 つの情報モジュールから読み込まれたデータを削除する。
-
指定されたファイルの ASN.1 モジュール名、または指定されたファイル内のすべてのインポート モジュールの ASN.1 モジュール名を返す。
-
現在 SMIR に読み込まれているすべての SNMP 情報モジュールの ASN.1 モジュール名を返す。
-
インポート モジュールの自動解決を実行する。これにより、必須のモジュールをユーザーが手動で指定する必要がなくなります。
-
出力を生成しないサイレント ローディング モードによる操作を実行する。ただし、インストール操作中に SMIR にデータを読み込むことは可能です。