而且,当然,如果机器没有加入域,函数应该返回
> null,或
>一个空字符串,或
>机器名称,或
>“.”
笔记:
> NetGetJoinInformation
Win32函数返回域的传统NetBIOS名称(例如AVATOPIA),而不是域的名称(例如avatopia.local)
> USERDOMAIN环境变量返回登录用户的域,可以与机器不同;并返回域的传统NetBIOS名称(例如AVATOPIA)
> USERDNSDOMAIN环境变量返回登录用户的域名,这可能与机器不同
Microsoft拥有知识库文章How to retrieve current user and domain names on Windows NT,Windows 2000,or Windows XP,它依赖于获取用户的安全令牌并调用LookupAccountSid.
> LookupAccountSid Win32函数返回域的传统NetBIOS名称(例如AVATOPIA);并返回登录用户的域,这可能与机器不同
更新一
我也尝试使用ADs对象绑定到域的IADs接口:
@H_404_23@IADs domain; ADsGetObject("LDAP://rootDES",IDs,out domain);这种方法的问题是:
>您无法获取域名(仅可分辨名称)
>如果用户没有查询AD的权限,则不起作用
>如果用户不是活动目录中的有效用户,则不起作用
>它仅适用于Active Directory域
更新二:
只要清楚我想要的是:
>选择哪个单选按钮
> what’s in the (selected) box
奖金阅读
> How to get fully qualified domain name on windows in Delphi(用户域)
> Machine’s domain name in .NET?(来自.NET)
解决方法
任何使用DsRoleGetPrimaryDomainInformation
生产用途的人都应该考虑在不再需要信息时调用DsRoleFreeMemory
释放内存块(根据评论中的讨论).
该函数返回three different domain names,例如:
域名森林名称:例如stackoverflow.com
>域名DNS名称:例如stackoverflow.com
域名NetBIOS名称:例如堆栈溢出
如果机器未加入域,那么Forest和dns都是空白的,只有NetBios名称填写了工作组名称,例如:
>域名森林名称:null
>域名DNS名称:例如空值
域名NetBIOS名称:例如WORKGROUP
该函数还返回一个标志,指示机器是否连接到域:
> DsRole_RoleMemberWorkstation:属于域的成员的工作站
> DsRole_RoleMemberServer:属于域的成员的服务器
> DsRole_RolePrimaryDomainController:主域控制器
> DsRole_RoleBackupDomainController:备份域控制器
或不:
> DsRole_RoleStandaloneWorkstation:不是域的成员的工作站> DsRole_RoleStandaloneServer:不是域的成员的服务器