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 回答