在远程计算机上模拟用户时 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 的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章