如何获取机器的域名(如果机器实际上已加入域)?
当然,如果机器未加入域,则该函数应返回
null, 要么 "."备注:
在NetGetJoinInformationWin32函数返回域(例如遗留下来的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);
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是:
更新二:
只是为了清楚我想要的是:

Har*_*ton 14
干得好:
#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;
}
Run Code Online (Sandbox Code Playgroud)
任何DsRoleGetPrimaryDomainInformation在生产中使用的人都应该考虑DsRoleFreeMemory在不再需要信息时调用释放内存块(根据评论中的讨论).
该函数返回三个不同的域名,例如:
stackoverflow.comstackoverflow.comSTACKOVERFLOW如果计算机未加入域,则Forest和dns都是空白的,只有NetBios名称填充了工作组的名称,例如:
nullnullWORKGROUP该函数还返回一个标志,指示计算机是否已加入域:
DsRole_RoleMemberWorkstation:作为域成员的工作站DsRole_RoleMemberServer:作为域成员的服务器DsRole_RolePrimaryDomainController:主域控制器DsRole_RoleBackupDomainController:备份域控制器或不:
DsRole_RoleStandaloneWorkstation:不是域成员的工作站DsRole_RoleStandaloneServer:不是域成员的服务器使用GetComputerNameEx您可以获取您的计算机名称和域名.
例:
TCHAR local[100];
DWORD hstSize = sizeof(local);
GetComputerNameEx(ComputerNameDnsDomain, local, &hstSize);
Run Code Online (Sandbox Code Playgroud)
注意:ComputerNameDnsDomain提供域名并ComputerNameNetBIOS提供本地工作组(计算机)名称.
| 归档时间: |
|
| 查看次数: |
15939 次 |
| 最近记录: |