System.Management を使用して、リモート マシンからプロセス情報を収集しようとしています。
これらの行に沿って何かを使用してリモート マシンの管理者になりすましているのですが、次のコードで例外がスローされます:「アクセスが拒否されました」。
ConnectionOptions options = new ConnectionOptions();
options.Impersonation = System.Management.ImpersonationLevel.Impersonate;
ManagementScope scope = new ManagementScope(@"\\" + machine + @"\root\cimv2", options);
scope.Connect();
ObjectQuery query = new ObjectQuery("Select * from Win32_Process where ProcessId = "
+ procID.ToString());
ManagementObjectSearcher mos = new ManagementObjectSearcher(scope, query);
string cmdLn = "";
foreach (ManagementObject mo in mos.Get())
{
cmdLn = (string)mo.GetPropertyValue("CommandLine");
}
ただし、にユーザー名とパスワードを指定するとoptions
、すべて正常に動作します。
このコードが偽装されたコンテキスト (リモート マシンで十分な権限を持っている) として実行されていることを確認したので、ユーザー名/パスワードが渡されないと機能しない理由がわかりません。
ユーザーの資格情報を明示的に渡さずに正常に認証することは可能ですか?