我如何获取机器的域名(如果机器实际上已加入域)?
当然,如果机器没有加入域,该函数应该返回
-
null
, or
- 一个空字符串,或者
- 机器的名称,或
"."
Notes:
the NetGetJoinInformation http://msdn.microsoft.com/en-us/library/windows/desktop/aa370423%28v=vs.85%29.aspxWin32 函数返回域的旧 NetBIOS 名称(例如AVATOPIA
),而不是域名(例如avatopia.local
)
the USERDOMAIN
环境变量返回登录用户的域,可以与本机不同;并且还返回域的旧 NetBIOS 名称(例如AVATOPIA
)
the USERDNSDOMAIN
环境变量返回登录用户的域名,可以与本机不同
微软有一篇知识库文章如何在 Windows NT、Windows 2000 或 Windows XP 上检索当前用户名和域名 http://support.microsoft.com/kb/111544,它依赖于获取用户的安全令牌并调用 LookupAccountSid。
- LookupAccountSid Win32 函数返回域的旧 NetBIOS 名称(例如
AVATOPIA
);并且还返回登录用户的域,该域可以与计算机不同
更新一
我还尝试使用 ADs 对象绑定到IADs
域接口:
IADs domain;
ADsGetObject("LDAP://rootDES", IDs, out domain);
这种方法的问题在于:
- 您无法获取域名(仅专有名称)
- 如果用户没有查询 AD 的权限,则不起作用
- 如果用户不是活动目录中的有效用户,它将不起作用
- 它仅适用于 Active Directory 域
更新二:
只是为了明确我想要的是:
- 选择了哪个单选按钮
- (选定的)框中有什么 http://4.bp.blogspot.com/-_WOWYdYK4Tg/TlPERL1jhvI/AAAAAAAABIQ/CUXUCTRU4lc/s400/se7en_movie_still.jpg
奖励阅读
-
如何在Delphi中获得Windows上的完全限定域名 https://stackoverflow.com/questions/8446940/how-to-get-fully-qualified-domain-name-on-windows-in-delphi(用户的域)
-
.NET 中机器的域名? https://stackoverflow.com/questions/508911/machines-domain-name-in-net(来自.NET)
干得好:
#include <Windows.h>
#include <DSRole.h>
#pragma comment(lib, "netapi32.lib")
#include <stdio.h>
int main(int argc, char ** argv)
{
DSROLE_PRIMARY_DOMAIN_INFO_BASIC * info;
DWORD dw;
dw = DsRoleGetPrimaryDomainInformation(NULL,
DsRolePrimaryDomainInfoBasic,
(PBYTE *)&info);
if (dw != ERROR_SUCCESS)
{
wprintf(L"DsRoleGetPrimaryDomainInformation: %u\n", dw);
return dw;
}
if (info->DomainNameDns == NULL)
{
wprintf(L"DomainNameDns is NULL\n");
}
else
{
wprintf(L"DomainNameDns: %s\n", info->DomainNameDns);
}
return 0;
}
任何人使用DsRoleGetPrimaryDomainInformation http://msdn.microsoft.com/en-us/library/windows/desktop/ms676042%28v=vs.85%29.aspx在生产使用中应该考虑调用DsRoleFreeMemory http://msdn.microsoft.com/en-us/library/windows/desktop/ms676041%28v=vs.85%29.aspx当不再需要信息时释放内存块(根据评论中的讨论)。
该函数返回三个不同的域名 http://msdn.microsoft.com/en-us/library/windows/desktop/ms676046%28v=vs.85%29.aspx, e.g.:
-
域林名称: e.g.
stackoverflow.com
-
域名 DNS 名称: e.g.
stackoverflow.com
-
域 NetBIOS 名称: e.g.
STACKOVERFLOW
如果计算机未加入域,则两者Forest and dns为空,仅 NetBios 名称填充工作组的名称,例如:
-
域林名称:
null
-
域名 DNS 名称: e.g.
null
-
域 NetBIOS 名称: e.g.
WORKGROUP
该函数还返回一个标志,指示计算机是否已加入域:
-
DsRole_RoleMemberWorkstation
:属于域成员的工作站
-
DsRole_RoleMemberServer
:属于域成员的服务器
-
DsRole_RolePrimaryDomainController
:主域控制器
-
DsRole_RoleBackupDomainController
:备份域控制器
or not:
-
DsRole_RoleStandaloneWorkstation
:不是域成员的工作站
-
DsRole_RoleStandaloneServer
:不是域成员的服务器
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)