public override CcwData GetCCWData(ulong obj) { if (_notCCW) { return(null); } // The dac cannot report this information prior to v4.5. if (DesktopHeap.DesktopRuntime.CLRVersion != DesktopVersion.v45) { return(null); } DesktopCCWData result = null; IObjectData data = DesktopHeap.GetObjectData(obj); if (data != null && data.CCW != 0) { ICCWData ccw = DesktopHeap.DesktopRuntime.GetCCWData(data.CCW); if (ccw != null) { result = new DesktopCCWData(DesktopHeap, data.CCW, ccw); } } else if (!_checkedIfIsCCW) { _notCCW = true; } _checkedIfIsCCW = true; return(result); }
public override CcwData GetCcwDataByAddress(ulong addr) { ICCWData ccw = GetCCWData(addr); if (ccw == null) { return(null); } return(new DesktopCCWData(_heap.Value, addr, ccw)); }
public ComCallWrapper(ICCWData data) { if (data is null) { throw new System.ArgumentNullException(nameof(data)); } Address = data.Address; IUnknown = data.IUnknown; Object = data.Object; Handle = data.Handle; RefCount = data.RefCount + data.JupiterRefCount; Interfaces = data.GetInterfaces(); }
internal DesktopCCWData(DesktopGCHeap heap, Address ccw, ICCWData data) { _addr = ccw; _ccw = data; _heap = heap; }
internal DesktopCCWData(DesktopGCHeap heap, ulong ccw, ICCWData data) { _addr = ccw; _ccw = data; _heap = heap; }
internal DesktopCCWData(DesktopGCHeap heap, Address ccw, ICCWData data) { m_addr = ccw; m_ccw = data; m_heap = heap; }