如何以编程方式查找域控制器/主域控制器?

时间:2014-04-18 04:59:32

标签: winapi nameservers domaincontroller

我想知道如何使用Win32 API在正在运行的应用程序中确定运行该应用程序的Windows工作站或服务器的域控制器/主域控制器。

特别是,给定一个机器的主机名,我想找到解析该主机名到特定机器的权威来源的名称。 (我认为这是域控制器;我对这方面的了解非常薄弱,所以我可能会以错误的方式提问。)。

我见过C# code fragment据说这样做,但不知道是否与Win32 API有任何关系。有很多“如何获得DC”网页,但它们都调用命令脚本,而不是API。

很高兴有代码,但愿意做一些提取步骤的功课,如果有人指出我正确的方向。

Linux中是否有模拟? (例如,寻找名称服务器的本机调用?我不假设使用Windows域控制器的Linux上下文。)

(啊哈......刚刚发现了这个问题:Get the domain name of a computer from Windows API。会再挖掘一下。编辑:也许我想要的功能是NetDCName?我在哪里得到它想要的参数? )。

编辑4月19日:我使用Eric的提示编写/测试了NetDCName。是的,它有一个时产生域控制器名称, 并且当没有时出现错误信号,这只是正确的功能性行为。

然而,函数调用似乎需要几秒钟!那为什么会这样? 这在我试图做的支票中造成了令人无法接受的,用户可见的延迟。

1 个答案:

答案 0 :(得分:3)

NetGetDCName是一种选择;如果您需要更多功能,DsGetDcName也是一种选择。

MSDN文档明确指出NULL用于表示默认值,因此

nStatus = NetGetDCName(NULL, NULL, (LPBYTE *) &lpDcName);

将返回本地计算机上默认域的域控制器。