5

http://msdn.microsoft.com/en-us/library/system.management.connectionoptions.aspx

ConnectionOptions co = new ConnectionOptions();
co.Username = CreateUserName(Domain, Username);

如果我将前面的代码与 ManagementScope 一起使用,如下所示:

ManagementScope ms = new ManagementScope("\\\\" + PcName + "\\root\\cimv2:Win32_Service='RpcSs'", co);
ms.Connect();

但是,如果我使用不正确的域,它仍然有效吗?我该如何纠正这一点。为什么会这样?

编辑 1:当我尝试访问可能具有其他凭据和其他域而不是我的机器的远程计算机时,会发生这种情况(我被允许使用错误的域和正确的管理员帐户和正确的密码)。

编辑2:在我的情况下,坏域意味着:该机器上不存在的域或当前用户输入的其他域不存在。

编辑 3:即使我使用此代码:

options.Authority = "ntlmdomain:DOMAIN";//this won't work either.

http://msdn.microsoft.com/en-us/library/system.management.connectionoptions.authority.aspx

4

1 回答 1

1

WbemTest 是了解 WMI 行为方式的标准。处理您的评论(@Floradu88,5 月 15 日):

1) WbemTest 在传递无效凭据(无效域)时在远程连接上失败

当然,这是预期的行为

2) 本地连接的 WbemTest “仅在没有凭据的情况下”工作

看起来这可能没有渗透到ManagementScopeConnectionOptions的文档中,但是:

连接到本地计算机时无法更改凭据。
(MSDN:WMI 任务:连接到 WMI 服务

备注
在与本地命名空间建立连接时,不要指定 strUser、strPassword 或 strAuthority。
(MSDN:IWbemLocator::ConnectServer


关于您最初的问题,因为您已经说过 WbemTest 的行为符合预期,所以我们知道 WMI 正在“工作”并且它不是一个边缘案例问题,例如目标计算机已配置为接受匿名连接。

一种可能性是您的 C# WMI 连接正在使用调用用户的凭据,而不是指定的(无效)凭据。请尝试运行相同的代码,但这次以本地计算机上的用户身份运行,其帐户在远程计算机上不存在。如果失败,则意味着正在使用调用者的凭据,而不是您想要的显式凭据。如果发生这种情况,则表明您在连接到远程计算机时模拟手动指定凭据的调用的实现存在错误。

于 2013-06-25T19:58:34.257 回答