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; }
/// <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; }
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); }
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; }
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; }
/// <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; }
internal void AddMapping(ClrAppDomain domain, ulong domainModule) { DesktopAppDomain appDomain = (DesktopAppDomain)domain; _mapping[domain] = domainModule; }
public DomainContainer(DesktopAppDomain system, DesktopAppDomain shared, IList <ClrAppDomain> domains) { System = system; Shared = shared; Domains = domains ?? throw new ArgumentNullException(nameof(domains)); }