如何获取机器的域名(如果机器实际上已加入域)?
当然,如果机器未加入域,则该函数应返回
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);
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.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);
Run Code Online (Sandbox Code Playgroud)
注意:ComputerNameDnsDomain
提供域名并ComputerNameNetBIOS
提供本地工作组(计算机)名称.
归档时间: |
|
查看次数: |
15939 次 |
最近记录: |