在远程计算机上模拟用户时拒绝访问WMI

时间:2012-10-05 21:25:36

标签: c# wmi impersonation

我正在尝试使用System.Management从远程计算机收集进程信息。

我使用these lines上的内容冒充远程计算机上的管理员,但以下代码抛出异常:“拒绝访问”。

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的用户名和密码,一切正常。

我已经验证此代码是作为模拟上下文(在远程计算机上具有足够的权限)执行的,所以我不确定为什么没有传递用户名/密码它无法正常工作。

是否可以成功进行身份验证而不显式传递用户的凭据?

1 个答案:

答案 0 :(得分:0)

使用WMI,在模拟特定用户时,您必须提供显式凭据。您在上面提供的链接使用变量lpszUsername和lpszPassword来说明这一点。