1

最近我试图找到问题“如何确定当前登录用户是否是域的一部分”的答案

在 Stackoverflow 上,我找到了相当不错的答案,其中涉及使用

using System.Security.Principal;
using System.DirectoryServices.AccountManagement;

但我也看到一个简单的解决方案说

System.Environment.UserDomainName; - gives name of the current user's domain name.
System.Environment.MachineName;    - gives name of the machine.

如果以上两个不相同,则表示用户是 UserDomainName 返回的域的一部分

很公平, MSDN的这个链接也证实了这一点

现在的问题是如果“域名”和“机器名”相同怎么办?或者是否有可能与域名完全相同名称的机器可以加入域?

如果这是真的,是否有可能通过在这个简单的解决方案中添加一些东西来反检查

4

1 回答 1

4

我敢打赌,如果当前登录的用户没有登录到域,他或她就没有专有名称。使用类型(1)的GetUserNameEx 。EXTENDED_NAME_FORMATNameFullyQualifiedDN

如果您返回一个值,那么您知道当前用户已登录到域。但是,调用此函数可能会在一段时间内意外阻塞您的程序。您可能希望以异步方式调用此函数,因为它可能会尝试连接到某些 Active Directory 服务并最终失败或超时。

实现此目的的一种更有弹性的方法是查找帐户 SID 并检查是否EqualPrefixSid可以将其与机器进行比较。如果是这种情况,那么您知道当前帐户是机器本地的(即不在域中)。这不涉及穿越网络并等待超时,因此它是一种更直接的方法。有趣的是,这也意味着如果机器名称与用户域相同,Windows 将不得不假设您要登录的域是本地机器,因此如果出现以下情况,几乎不可能登录到实际域机器名称确实与域相同。

于 2013-02-19T13:43:23.637 回答