[英]How to get Windows domain name?
如何获取机器的域名(如果机器实际上已加入域)?
当然,如果机器未加入域,则该函数应返回
null
,或 "."
备注 :
NetGetJoinInformation
Win32函数返回域的遗留NetBIOS名称(例如AVATOPIA
),而不是域名(例如avatopia.local
)
USERDOMAIN
环境变量返回登录用户的域,该域可以与机器不同; 并返回域的传统NetBIOS名称(例如AVATOPIA
)
USERDNSDOMAIN
环境变量返回登录用户的域名,该域名可以与计算机不同
Microsoft有一篇知识库文章如何在Windows NT,Windows 2000或Windows XP上检索当前用户和域名 ,这些文章依赖于获取用户的安全令牌并调用LookupAccountSid。
AVATOPIA
); 并且还返回登录用户的域,该域可以与计算机不同 我也尝试使用ADs对象绑定到域的IADs
接口:
IADs domain;
ADsGetObject("LDAP://rootDES", IDs, out domain);
这种方法的问题是:
更新二 :
只是为了清楚我想要的是:
干得好:
#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
任何人都应该考虑在不再需要信息时调用DsRoleFreeMemory
来释放内存块(根据评论中的讨论)。
该函数返回三个不同的域名 ,例如:
stackoverflow.com
stackoverflow.com
STACKOVERFLOW
如果计算机未加入域,则Forest和dns都是空白的,只有NetBios名称填充了工作组的名称,例如:
null
null
WORKGROUP
该函数还返回一个标志,指示计算机是否已加入域:
DsRole_RoleMemberWorkstation
:作为域成员的工作站 DsRole_RoleMemberServer
:作为域成员的服务器 DsRole_RolePrimaryDomainController
:主域控制器 DsRole_RoleBackupDomainController
:备份域控制器 或不:
DsRole_RoleStandaloneWorkstation
:不是域成员的工作站 DsRole_RoleStandaloneServer
:不是域成员的服务器 使用GetComputerNameEx
您可以获取您的计算机名称和域名。
例:
TCHAR local[100];
DWORD hstSize = sizeof(local);
GetComputerNameEx(ComputerNameDnsDomain, local, &hstSize);
注意: ComputerNameDnsDomain
提供域名, ComputerNameNetBIOS
提供本地工作组(计算机)名称。
您可以使用Win32_NTDomain类通过WMI获取域名。 该链接包含有关如何与WMI交互的示例的其他链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.