internal static void SetProcessTopologyMode(TopologyMode mode)
        {
            if (TopologyMode.Adam == mode)
            {
                throw new ArgumentException("mode. Adam topology mode can't be specified");
            }
            if (TopologyMode.Ldap == mode && TopologyProvider.IsTopologyServiceProcess())
            {
                TopologyProvider.isRunningOnTopologyService = true;
            }
            ExTraceGlobals.TopologyProviderTracer.TraceDebug <TopologyMode, TopologyMode>(0L, "User set topology mode from {0} to {1}", (TopologyProvider.userSetTopologyMode != null) ? TopologyProvider.userSetTopologyMode.Value : TopologyProvider.CurrentTopologyMode, mode);
            TopologyProvider.userSetTopologyMode = new TopologyMode?(mode);
            int          num;
            TopologyMode topologyMode = TopologyProvider.SelectTopologyMode(out num);

            if (TopologyProvider.staticInstance != null && (TopologyProvider.userSetTopologyMode.Value != TopologyProvider.staticInstance.TopologyMode || TopologyProvider.userSetTopologyMode.Value != topologyMode))
            {
                IDisposable      disposable       = TopologyProvider.staticInstance as IDisposable;
                TopologyProvider topologyProvider = TopologyProvider.InitializeInstance();
                topologyProvider.PopulateConfigNamingContextsForLocalForest();
                topologyProvider.PopulateDomainNamingContextsForLocalForest();
                ConnectionPoolManager.Reset();
                if (disposable != null)
                {
                    disposable.Dispose();
                }
            }
        }