リモート管理と接続オプション
管理操作は、ローカル ボックスだけでなくリモート ボックスに対しても特別な処理を行うことなく同じように実行できます。リモート コンピュータ上の管理オブジェクトにアクセスするには、まず、ユーザーはそのコンピュータへの接続を確立する必要があります。接続は ManagementScope オブジェクトによって表されます。既定では、スコープはローカル コンピュータと root\cimv2 システム名前空間に限定されていますが、特定のコンピュータを指定し、必要に応じてスコープに異なる WMI 名前空間を指定することによって、この設定を変更できます。また、リモート接続するときには、現在ログオンしているユーザー以外のユーザーに対して資格情報を指定でき、そのリモート コンピュータ上での操作は指定されたユーザーのコンテキストで実行されます。この指定は、ConnectionOptions オブジェクトを使用して実行できます。別のユーザーとしてリモート コンピュータに接続するコード例を次に示します。
using System;
using System.Management;
public class RemoteConnect {
public static void Main() {
//Build an options object for the connection
ConnectionOptions options = new ConnectionOptions();
options.Username = "User1";
options.Password = "MyPassword";
//Make a connection to a remote computer using these options
ManagementScope scope = new ManagementScope("\\\\Server1\\root\\cimv2", options);
scope.Connect();
}
}
System.Management のリモート処理では、基礎となるリモート処理機構として DCOM を使用します。ConnectionOptions オブジェクトは、リモート DCOM 操作で WMI が使用する "偽装" と "認証" のレベルも制御します。これらのパラメータの既定値は、それぞれ ImpersonationLevel.Impersonate と AuthenticationLevel.Unchanged です。
AuthenticationLevel.Unchanged は、標準的な DCOM ネゴシエーション プロセスを使用するときにサーバーが要求する認証をクライアントの既定値として使用することを意味します。Windows 2000 以前のバージョンでは、WMI サービスによって接続レベルの認証が要求されます。Windows XP 以降のバージョンでは、パケット レベルの認証が要求されます。クライアントで特定の認証の設定が必要である場合は、ConnectionOptions オブジェクトの Authentication プロパティを使用して特定の接続の認証レベルを制御できます。
ImpersonationLevel.Impersonate は、要求された情報を WMI データ プロバイダが収集するときにその ID を偽装することを、クライアントが許可することを意味します。この既定の設定は、プロバイダが信頼できるアプリケーションまたはサービスである場合に便利です。クライアントから情報を取得するときに、プロバイダは明示的な ID チェックやアクセス チェックを実行する必要がないからです。ただし、なんらかの理由で、指定されたプロバイダや実装されたアプリケーションが信頼できない場合は、そのプロバイダにクライアントの偽装を許可するとセキュリティ上の問題が発生する可能性があります。このような場合は、クライアント アプリケーションで偽装レベルを ImpersonationLevel.Identify などの低いレベルに変更することをお勧めします。これによって、プロバイダがアクセス チェックを実行しない場合や、要求された情報を取得するための実行コンテキストで十分なアクセス許可を持っていない場合は、特定のプロバイダから情報にアクセスできなくなることがあります。
参照
System.Management による管理情報へのアクセス | 管理オブジェクトのコレクションの取得 | 管理情報のクエリ | 管理イベントへのサブスクライブと管理イベントの処理 | 管理オブジェクトのメソッドの実行 | 厳密に型指定されたオブジェクトの使用