Exemple #1
0
        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);
        }
Exemple #2
0
        public override CcwData GetCcwDataByAddress(ulong addr)
        {
            ICCWData ccw = GetCCWData(addr);

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

            return(new DesktopCCWData(_heap.Value, addr, ccw));
        }
Exemple #3
0
        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();
        }
Exemple #4
0
 internal DesktopCCWData(DesktopGCHeap heap, Address ccw, ICCWData data)
 {
     _addr = ccw;
     _ccw = data;
     _heap = heap;
 }
Exemple #5
0
 internal DesktopCCWData(DesktopGCHeap heap, ulong ccw, ICCWData data)
 {
     _addr = ccw;
     _ccw  = data;
     _heap = heap;
 }
Exemple #6
0
 internal DesktopCCWData(DesktopGCHeap heap, Address ccw, ICCWData data)
 {
     m_addr = ccw;
     m_ccw  = data;
     m_heap = heap;
 }