【问题标题】:Delphi- How to get my full domain nameDelphi-如何获取我的完整域名
【发布时间】:2016-11-20 07:38:28
【问题描述】:

在我的程序中,我试图检索当前机器的域名。 我发现了一些人们在论坛中编写的代码,但它们似乎都可以部分工作。

我的意思是我的域名类似于“mydomain.mydomain11.com” 并且在尝试检索域名时,我总是只得到“mydomain”而不是“mydomain.mydomain11”

我还尝试使用返回相同内容的“GetEnvironmentVariable”函数。

如果可能,我想知道如何检索完整路径。

我的最终目标是使用 LDAP 协议查询活动目录,因此了解如何将域路径分块为以下内容将非常有帮助:

CN=Users,DC=mydomain,DC=mydomain11,DC=com

但是现在获取我的完整域名就可以了..

【问题讨论】:

  • 好的,谢谢,现在我有一个包含完整域名的字符串。有没有办法按照我上面使用的方式对其进行分块,以便我可以将它用于 LDAP qwery?
  • 如果你只是想连接到LDAP,不需要知道域名或dn,你可以连接到LDAP://RootDSE。见msdn.microsoft.com/en-us/library/ms677945(v=vs.85).aspx
  • 稍后我将要在此域上搜索用户/组...
  • 是的,这就是您可以使用 RootDSE 的目的,RootDSE 文档中的最后一个链接为您提供了一个示例:msdn.microsoft.com/en-us/library/ms676736(v=vs.85).aspx
  • 感谢 Remko,添加的示例让我很清楚。

标签: delphi delphi-10-seattle


【解决方案1】:

您可以将GetComputerNameEx 函数与ComputerNamePhysicalDnsDomain 参数一起使用:

分配给本地计算机的 DNS 域的名称。如果本地计算机是集群中的一个节点,lpBuffer接收本地计算机的DNS域名,而不是集群虚拟服务器的名称。`

如果您的目标是连接到 LDAP 以搜索目录中的对象,通常的方法是连接到 RootDSE。这是example

【讨论】:

  • 当问题列出 Delphi Object Pascal 时,为什么所有答案和链接都指向 Microsoft?
  • @JosephPoirier Delphi 生成在 Microsoft Windows 操作系统(以及其他)上运行的可执行文件。有时我们需要编写直接使用操作系统 API 的代码。
  • Windows API 需要读取计算机加入的 DNS 域名。
  • 查看德尔福实现的答案:stackoverflow.com/a/60754717/1855801
【解决方案2】:

参考What's the best method for getting the local computer name in Delphi

参考http://www.delphipages.com/forum/showthread.php?t=29823 在 LorAn 下,读作 Lorne - 很棒的 fetch 框架

在 Delphi 变量 MAXCHAR 中滚动缓冲区大小,应该是在最短时间范围内可以返回的最大大小

function getDomain: string;
var
  vlDomainName : array[0..MAXCHAR] of char;
  vlSize : ^DWORD;
begin
  New(vlSize);
  vlSize^ := MAXCHAR;
  ExpandEnvironmentStrings(PChar('%USERDOMAIN%'), vlDomainName, vlSize^);
  Dispose(vlSize);
  Result := vlDomainName;
end;

获取 DNSServer.DOMAIN.DOMAIN..

使用 ADSI 库 ADSystemInfo GetAnyDCName() 函数并按小数点拆分 [.]

【讨论】:

  • OP 专门询问如何获取计算机加入的域名,而不是登录用户的域(在 AD 林中或使用受信任域时可能不同)。此外,%USERDOMAIN% 变量返回 Netbios 域名(例如 mydomain 而不是 mydomain.mydomain11.com)。最后,为什么要读取环境变量而不是使用为此目的而设计的适当 API?
  • 域名的 ADSI 函数返回的是计算机名而不是域名。显然微软创建快捷方式变量是有原因的
  • 另外,对于开发软件,我认为没有理由通过用户当前登录之外的 AD 组进行访问。你能提供一个需要这样做的场景吗?
  • ps。雷姆科。我没有否决您的回答,我只是不明白它是如何被认为是完整的。根据问题,它并不比我的更完整。
猜你喜欢
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 2022-01-15
  • 2014-10-12
相关资源
最近更新 更多