Beispiel #1
0
        internal void InitDomains()
        {
            if (_domains != null)
            {
                return;
            }

            _modules.Clear();
            _domains = new List <ClrAppDomain>();

            IAppDomainStoreData ads = GetAppDomainStoreData();

            if (ads == null)
            {
                return;
            }

            IList <ulong> domains = GetAppDomainList(ads.Count);

            foreach (ulong domain in domains)
            {
                DesktopAppDomain appDomain = InitDomain(domain);
                if (appDomain != null)
                {
                    _domains.Add(appDomain);
                }
            }

            _system = InitDomain(ads.SystemDomain, "System Domain");
            _shared = InitDomain(ads.SharedDomain, "Shared Domain");

            _moduleFiles = null;
            _moduleSizes = null;
        }
Beispiel #2
0
        /// <summary>
        /// Flushes the dac cache.  This function MUST be called any time you expect to call the same function
        /// but expect different results.  For example, after walking the heap, you need to call Flush before
        /// attempting to walk the heap again.
        /// </summary>
        public override void Flush()
        {
            OnRuntimeFlushed();

            Revision++;
            _dacInterface.Flush();

            _modules.Clear();
            _moduleFiles = null;
            _moduleSizes = null;
            _domains     = null;
            _system      = null;
            _shared      = null;
            _threads     = null;
            MemoryReader = null;
            _heap        = null;
            _threadpool  = null;
        }
Beispiel #3
0
        private DesktopAppDomain InitDomain(ulong domain, string name = null)
        {
            ulong[]        bases      = new ulong[1];
            IAppDomainData domainData = GetAppDomainData(domain);

            if (domainData == null)
            {
                return(null);
            }

            DesktopAppDomain appDomain = new DesktopAppDomain(this, domainData, name ?? GetAppDomaminName(domain));

            if (domainData.AssemblyCount > 0)
            {
                foreach (ulong assembly in GetAssemblyList(domain, domainData.AssemblyCount))
                {
                    IAssemblyData assemblyData = GetAssemblyData(domain, assembly);
                    if (assemblyData == null)
                    {
                        continue;
                    }

                    if (assemblyData.ModuleCount > 0)
                    {
                        foreach (ulong module in GetModuleList(assembly, assemblyData.ModuleCount))
                        {
                            DesktopModule clrModule = GetModule(module);
                            if (clrModule != null)
                            {
                                clrModule.AddMapping(appDomain, module);
                                appDomain.AddModule(clrModule);
                            }
                        }
                    }
                }
            }

            return(appDomain);
        }
Beispiel #4
0
        private DesktopAppDomain InitDomain(ulong domain, string name = null)
        {
            ulong[] bases = new ulong[1];
            IAppDomainData domainData = GetAppDomainData(domain);
            if (domainData == null)
                return null;

            DesktopAppDomain appDomain = new DesktopAppDomain(this, domainData, name ?? GetAppDomaminName(domain));

            if (domainData.AssemblyCount > 0)
            {
                foreach (ulong assembly in GetAssemblyList(domain, domainData.AssemblyCount))
                {
                    IAssemblyData assemblyData = GetAssemblyData(domain, assembly);
                    if (assemblyData == null)
                        continue;

                    if (assemblyData.ModuleCount > 0)
                    {
                        foreach (ulong module in GetModuleList(assembly, assemblyData.ModuleCount))
                        {
                            DesktopModule clrModule = GetModule(module);
                            if (clrModule != null)
                            {
                                clrModule.AddMapping(appDomain, module);
                                appDomain.AddModule(clrModule);
                            }
                        }
                    }
                }
            }

            return appDomain;
        }
Beispiel #5
0
        internal void InitDomains()
        {
            if (_domains != null)
                return;

            _modules.Clear();
            _domains = new List<ClrAppDomain>();

            IAppDomainStoreData ads = GetAppDomainStoreData();
            if (ads == null)
                return;

            IList<ulong> domains = GetAppDomainList(ads.Count);
            foreach (ulong domain in domains)
            {
                DesktopAppDomain appDomain = InitDomain(domain);
                if (appDomain != null)
                    _domains.Add(appDomain);
            }

            _system = InitDomain(ads.SystemDomain, "System Domain");
            _shared = InitDomain(ads.SharedDomain, "Shared Domain");

            _moduleFiles = null;
            _moduleSizes = null;
        }
Beispiel #6
0
        /// <summary>
        /// Flushes the dac cache.  This function MUST be called any time you expect to call the same function
        /// but expect different results.  For example, after walking the heap, you need to call Flush before
        /// attempting to walk the heap again.
        /// </summary>
        public override void Flush()
        {
            OnRuntimeFlushed();

            Revision++;
            _dacInterface.Flush();

            _modules.Clear();
            _moduleFiles = null;
            _moduleSizes = null;
            _domains = null;
            _system = null;
            _shared = null;
            _threads = null;
            MemoryReader = null;
            _heap = null;
            _threadpool = null;
        }
Beispiel #7
0
        internal void AddMapping(ClrAppDomain domain, ulong domainModule)
        {
            DesktopAppDomain appDomain = (DesktopAppDomain)domain;

            _mapping[domain] = domainModule;
        }
Beispiel #8
0
 public DomainContainer(DesktopAppDomain system, DesktopAppDomain shared, IList <ClrAppDomain> domains)
 {
     System  = system;
     Shared  = shared;
     Domains = domains ?? throw new ArgumentNullException(nameof(domains));
 }