示例#1
0
        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);
        }