Поэтому мне нужно найти все домены в лесу, в котором находится хост.
По всему, что я прочитал, спрашиваю «namingContexts«после открытия открытого GC: // RootDSE Должен дать мне это, но я вижу только контексты именования для корня леса. Я проверил все HW, все DC работают и работают, GC хороши. Я знаю, что данные есть, так как Get-ADForest показывает домены, которые я ищу. Что мне не хватает ???
Вот код:
HRESULT hr;
IADs* pGCContainer = NULL;
VARIANT varContainerRetVal;
std::vector<std::string> vecUPNSuffixes;
BSTR path = NULL;
// Initialize COM.
hr = CoInitialize(NULL);
if(FAILED(hr)){
LogInfo("CoInitialize failed hr = %08x",hr);
}
VariantInit(&varContainerRetVal);
// look for all other Domains in the forest
hr = getGCRootDSEContainerObject(&pGCContainer); // this does an ADsGetObject("GC://RootDSE",IID_IADS,(void**)pGCContainer);
if (SUCCEEDED(hr) && pGCContainer)
{
// get NamingContext
hr = pGCContainer->Get(_bstr_t(LDAP_OBJ_NAMEING_CTX.c_str()),&varContainerRetVal);
vecForestDomains = getVariantArrayContentsAsVector(varContainerRetVal); // as the name implies this moves a Variant Array into an std::vector<std::string>
VariantInit(&varContainerRetVal);
};
Это работает до некоторой степени, так как я получаю 5 записей назад, но только из корневого домена, другие домены не перечислены. И действительно странная часть в том, что я видел, что это на самом деле работает день назад.
Вот что я получаю сейчас:
+ [0] "DC=boston,DC=com"+ [1] "CN=Configuration,DC=boston,DC=com"+ [2] "CN=Schema,CN=Configuration,DC=boston,DC=com"+ [3] "DC=DomainDnsZones,DC=boston,DC=com"+ [4] "DC=ForestDnsZones,DC=boston,DC=com"
Это то, что я видел вчера, между кодами нет изменений
+ [0] "DC=boston,DC=com"+ [1] "DC=southend,DC=boston,DC=com
+ [2] "CN=Configuration,DC=boston,DC=com"+ [3] "CN=Schema,CN=Configuration,DC=boston,DC=com"+ [4] "DC=DomainDnsZones,DC=southend,DC=boston,DC=com"+ [5] "DC=ForestDnsZones,DC=boston,DC=com"
Задача ещё не решена.
Других решений пока нет …