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

Posted

技术标签:

【中文标题】在远程计算机上模拟用户时 WMI 的访问被拒绝【英文标题】:Access Denied for WMI when impersonating user on remote machine 【发布时间】:2012-10-05 21:25:35 【问题描述】:

我正在尝试使用 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】:

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

【讨论】:

我正在使用显式凭据进行模拟。我希望我不需要再次传递这些凭据来使用 WMI(这主要是为了避免两段代码之间的过度耦合)。 我没有看到您在代码中的第一次或第二次传递显式凭据的位置。我错过了吗?无论哪种方式,将它们传递给远程主机应该是所有需要的 - 除非您通过 WMI 建立另一个 WMI 连接该远程主机到第三主机。 WMI 就是这么难..

以上是关于在远程计算机上模拟用户时 WMI 的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

WMI 访问被拒绝问题

WMI 访问被拒绝

WMI 的“访问被拒绝”异常

WMI - 在远程域机器中读取 IIS 应用程序时引发“拒绝访问”异常

为啥使用 WMI 连接时出现访问被拒绝错误?

什么是WMI 有什么用?