我被要求查看windows服务,该服务使用win32LDAP API从Active Directory树中检索数据,并将JSON数据输出到文本文件。它工作得很好,但我需要修改它,以便我获得windows 2000之前的登录名。该服务是用c++编写的。
该服务已经成功地使用以下方法检索了各种其他属性字符串:
PTSTR *pszValues=ldap_get_values(pLdap,pEntry,szAttribute);
以及:
if (_tcscmp(szAttribute,TEXT("uUsnChanged"))==0) // uSNChanged is an example of an attribute
pItemInfo->uUsnChanged=_tcstoui64(pszValues[0],NULL,10); // pItemInfo is a struct defined elsewhere to hold the results for any given entry
我看了http://msdn.microsoft.com/en-us/library/ms679021(v=VS.85).aspx查看是否有用于windows 2000以前版本登录的属性或类似的属性,希望我可以将其添加为另一个szAttribute(在本例中替换“uUsnChanged”),但没有成功。看看API,我一直无法想出获取这些信息的方法。
我找到了属性sAMAccountName,我认为它可以提供所需的信息,但它只为我提供DOMAIN/name格式的name部分。典型的,这是我想要的另一部分!
有人知道如何从pEntry中获取pre-windows2000字符串吗?
@JPBlanc在测试服务器上运行时,我们现在得到了正确的nETBIOSName属性。该应用程序的工作假设是每个DC最多有一个nETBIOS名称属性。它通过执行以下操作找到它:
使用<code>ldap_init(NULL,0)获取默认主机
使用<code>ldap_search_s(pLdap,NULL,ldap_COPE_BASE,NULL,pszAttrs,FALSE,&;pResults)获取配置命名上下文将连接句柄作为第一个参数传入
使用<code>ldap_get_values(pLdap,pEntry,TEXT(“configurationNamingContext”))检索configurationNamingContext属性代码>
将“CN=Partitions”连接到字符串的开头,给出类似“CN=Partitions,CN=Configuration,DC=domain,DC=com,DC=au”的内容
然后,它使用<code>ldap_search_s(pLdap,szPartitionNC,ldap_COPE_SUBTREE,TEXT(“(nETBIOS名称=*)”),pszAttrs,FALSE,&;p结果)代码>
然后它在结果中循环寻找任何具有nETBIOSName属性的东西,一旦找到一个,它就会跳出循环并返回值。
你知道这是否足以在任何AD配置中工作吗?