internal static ArrayList EnumerateDomainControllers(DirectoryContext context, string domainName, string siteName, long dcFlags) { Hashtable hashtables; DomainControllerInfo domainControllerInfo = null; ArrayList arrayLists = new ArrayList(); if (siteName == null) { int num = Locator.DsGetDcNameWrapper(null, domainName, null, dcFlags & (long)0x9040, out domainControllerInfo); if (num != 0) { if (num != 0x54b) { throw ExceptionHelper.GetExceptionFromErrorCode(num); } else { return(arrayLists); } } else { siteName = domainControllerInfo.ClientSiteName; } } if (!DirectoryContext.DnsgetdcSupported) { hashtables = Locator.DnsQueryWrapper(domainName, null, dcFlags); if (siteName != null) { foreach (string key in Locator.DnsQueryWrapper(domainName, siteName, dcFlags).Keys) { if (hashtables.Contains(key)) { continue; } hashtables.Add(key, null); } } } else { hashtables = Locator.DnsGetDcWrapper(domainName, siteName, dcFlags); } foreach (string str in hashtables.Keys) { DirectoryContext newDirectoryContext = Utils.GetNewDirectoryContext(str, DirectoryContextType.DirectoryServer, context); if ((dcFlags & (long)64) == (long)0) { arrayLists.Add(new DomainController(newDirectoryContext, str)); } else { arrayLists.Add(new GlobalCatalog(newDirectoryContext, str)); } } return(arrayLists); }