最近,我试图找到问题的答案“如何确定当前登录用户是否属于域名”
在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
的链接确认现在的问题是如果“域名”和“机器名称”相同怎么办? 要么 具有与域名完全相同名称的计算机是否可以加入域?
如果这是真的,是否有可能通过向这个简单的解决方案添加内容来反击检查
答案 0 :(得分:4)
我敢打赌,如果他或她没有登录到域,则当前登录的用户没有名字。将GetUserNameEx与EXTENDED_NAME_FORMAT
类型NameFullyQualifiedDN
(1)一起使用。
如果您返回值,则表示当前用户已登录到域。但是,调用此函数可能会在一段时间内意外阻止您的程序。您可能希望以异步方式调用此函数,因为它可能会尝试连接到某些Active Directory服务,并最终失败或超时。
实现此目的的更具弹性的方法是查找帐户SID并检查EqualPrefixSid
是否可以将其与计算机进行比较。如果是这种情况,那么您知道当前帐户是机器的本地帐户(即不在域中)。这不涉及穿越网络并等待超时,因此这是一种更直接的方法。有趣的是,它还意味着如果计算机名称与用户域相同,则Windows必须假定您要登录的域是本地计算机,因此如果登录到实际域,则几乎不可能机器名称实际上与域名相同。