3

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

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

我见过一个据称是这样做的C# 代码片段,但不知道是否与 Win32 API 有任何关系。有很多“如何获得 DC”网页,但它们都在调用命令脚本,而不是 API。

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

Linux中有模拟吗?(例如,查找名称服务器的本地调用?我没有假设带有 Windows 域控制器的 Linux 上下文)。

(啊哈......刚刚发现了这个问题:Get the domain name of a computer from Windows API。将深入研究它。编辑:也许我想要的功能是NetDCName?我在哪里可以获得它想要的参数?)。

编辑 4 月 19 日:我使用 Eric 的提示对 NetDCName 进行了编码/测试。是的,当有域控制器名称时,它会生成域控制器名称,而当没有域控制器名称时,它会生成错误信号,这正是正确的功能行为。

但是,函数调用似乎需要几秒钟!为什么会这样?这给我正在尝试做的检查带来了不可接受的、用户可见的延迟。

4

1 回答 1

4

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

MSDN 文档明确指出使用 NULL 表示默认值,所以

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

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

于 2014-04-18T23:14:19.507 回答