0

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、すべて正常に動作します。

このコードが偽装されたコンテキスト (リモート マシンで十分な権限を持っている) として実行されていることを確認したので、ユーザー名/パスワードが渡されないと機能しない理由がわかりません。

ユーザーの資格情報を明示的に渡さずに正常に認証することは可能ですか?

4

1 に答える 1

0

WMI では、特定のユーザーを偽装するときに、明示的な資格情報を提供する必要があります。上記のリンクは、変数 lpszUsername と lpszPassword でこれを述べています。

于 2012-11-04T05:29:42.337 に答える