Delphi-如何获取我的完整域名

Delphi-如何获取我的完整域名,delphi,delphi-10-seattle,Delphi,Delphi 10 Seattle,在我的程序中,我试图检索当前机器的域名。 我发现了一些人们在论坛上写的代码,但它们似乎都能部分工作 我的意思是,我的域名类似于“mydomain.mydomain11.com” 当尝试检索域名时,我总是只得到“mydomain”,而不是“mydomain.mydomain11” 我还尝试使用“GetEnvironmentVariable”函数,该函数返回相同的内容 如果可能,我想知道如何检索完整路径 我的最终目标是使用LDAP协议查询active directory,因此了解如何将域路径分块到以

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

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

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

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

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

CN=Users,DC=mydomain,DC=mydomain11,DC=com
但是现在获取我的完整域名就可以了。

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

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

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

参考号 在罗兰的领导下,发音为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 library ADSystemInfo GetAnyDCName()函数并按小数点[]拆分。

好的,谢谢,现在我有了一个包含完整域名的字符串。是否有一种方法可以像我上面使用的那样对其进行分块,以便我可以将其用于LDAP qwery?如果您只想连接到LDAP,则不需要知道域名或dn,您只需连接到
LDAP://RootDSE
。请看,稍后我将要在此域上搜索用户/组…是的,这就是您可以使用RootDSE的原因,RootDSE文档中的最后一个链接为您提供了一个示例:感谢Remko,添加的示例向我说明了这一点。当问题列出Delphi Object Pascal时,为什么所有的答案和链接都指向了微软?@JosephPoirier Delphi生成了在微软Windows操作系统上运行的可执行文件(其中包括)。有时我们需要编写直接与操作系统API一起工作的代码。需要Windows API来读取计算机加入的DNS域名。请参阅以下关于delphi实现的答案:OP特别询问如何获取计算机加入的域名,而不是登录用户的域(在AD林中或使用受信任域时可能不同)。此外,
%USERDOMAIN%
变量返回Netbios域名(例如mydomain而不是mydomain.mydomain11.com)。最后,为什么要读取环境变量而不是使用为此目的而设计的适当API?DomainName的ADSI函数返回的是computername而不是DomainName。显然,Microsoft创建快捷方式变量是有原因的。此外,为了开发软件,我认为没有理由在用户c以外的广告组中运行当前登录访问。你能提供一个场景吗?ps.Remko。我没有否决你的答案,我只是不明白它是如何被认为是完整的。根据问题,它并不比我的更完整。