C++ 如何获取Windows域名?
如何获取计算机的域名(如果计算机实际上已加入域) 当然,如果机器没有加入域,函数应该返回C++ 如何获取Windows域名?,c++,windows,dns,C++,Windows,Dns,如何获取计算机的域名(如果计算机实际上已加入域) 当然,如果机器没有加入域,函数应该返回 null,或 空字符串,或 机器的名称,或 “ 注释: Win32函数返回域的传统NetBIOS名称(例如AVATOPIA),而不是域的名称(例如AVATOPIA.local) USERDOMAIN环境变量返回登录用户的域,该域可能不同于机器;并且还返回域的传统NetBIOS名称(例如,AVATOPIA) USERDNSDOMAIN环境变量返回登录用户的域名,该域名可能与计算机不同 Microsof
,或null
- 空字符串,或
- 机器的名称,或
“
- Win32函数返回域的传统NetBIOS名称(例如
),而不是域的名称(例如AVATOPIA
)AVATOPIA.local
环境变量返回登录用户的域,该域可能不同于机器;并且还返回域的传统NetBIOS名称(例如,USERDOMAIN
)AVATOPIA
环境变量返回登录用户的域名,该域名可能与计算机不同USERDNSDOMAIN
- LookupAccountSid Win32函数返回域的旧版NetBIOS名称(例如,
);并且还返回登录用户的域,该域可能与计算机不同AVATOPIA
IADs
接口:
IADs domain;
ADsGetObject("LDAP://rootDES", IDs, out domain);
这种方法的问题在于:
- 您无法获取域名(仅可分辨名称)
- 如果用户没有查询广告的权限,则此操作无效
- 如果用户不是active directory中的有效用户,则此选项无效
- 它仅适用于Active Directory域
- 选择了哪个单选按钮
- (用户域)
- (来自.NET)
#包括
#包括
#pragma注释(lib,“netapi32.lib”)
#包括
int main(int argc,字符**argv)
{
DSROLE\u PRIMARY\u DOMAIN\u INFO\u BASIC*INFO;
德沃德;
dw=DsRoleGetPrimaryDomainInformation(NULL,
DsRolePrimaryDomainInfoBasic,
(PBYTE*)和信息);
if(dw!=错误\u成功)
{
wprintf(L“DsRoleGetPrimaryDomainInformation:%u\n”,dw);
返回数据仓库;
}
如果(信息->域名DNS==NULL)
{
wprintf(L“域名DNS为空\n”);
}
其他的
{
wprintf(L“域名DNS:%s\n”,信息->域名DNS);
}
返回0;
}
< P>生产中使用的任何人都应该考虑在不再需要信息时调用内存块(如评论中的讨论)。
函数返回,例如:
- 域名林名称:例如
stackoverflow.com
- 域名域名:例如
stackoverflow.com
- 域NetBIOS名称:例如
堆栈溢出
- 域名林名称:
null
- 域名域名:例如
null
- 域NetBIOS名称:例如
工作组
:作为域成员的工作站DsRole\u rolemberworkstation
:作为域成员的服务器DsRole\u rolemberserver
:主域控制器DsRole\u RolePrimaryDomainController
:备份域控制器DsRole\u RoleBackupDomainController
:不是域成员的工作站DsRole\u RoleStandaloneWorkstation
:不是域成员的服务器DsRole\u RoleStandaloneServer
TCHAR local[100];
DWORD hstSize = sizeof(local);
GetComputerNameEx(ComputerNameDnsDomain, local, &hstSize);
注释:给出域名和<代码> Computer NAMENETBIOS < /Computer >给出本地工作组(计算机)名称。< /P>您使用哪种语言来获取它?@ TPAKSU本机代码,因此您可以用C/C++、Delphi、C语言调用p/援引、汇编等。(这是一种迂回的说法,表示我不是从公共语言运行时或Java运行时内部调用它,也没有访问.NET Framework类库或Java类库的权限)我不清楚为什么您引用的引用不充分?我知道您希望从本机代码执行此操作,但是.NET中的
System.DirectoryServices.ActiveDirectory.Domain
是否返回所需信息?@MarkRansom您引用的是哪一个引用,查询用户域的引用,来自.NET的引用,还是返回NetBIOS名称的查询?查询select*from Win32\u NTDomain
似乎需要15秒才能返回;而且它在Windows 2000上不工作。WMI速度慢且不可靠。最好使用本机API GetComputerNameEx()正如@Sanju Monu所建议的。Windows 2000中也存在GetComputerNameEx。作为记录,我没有在非域计算机上测试过它。但是如果它表现不好,只需首先使用NetGetJoinInformation检查您是否在域中。它在非域加入的计算机、AD域加入的计算机、Windows 2000和非c的计算机上工作连接到网络。我想我们有一个赢家。我只需要弄清楚“dns域名”和“森林域名”之间的区别——哪一个是我的域名()@wishmesh:经过考虑后,我决定回滚您的编辑。调用DsRol