Esempio n. 1
0
        public int Commit(IStreamImpl *pinst, uint grfCommitFlags)
        {
            var stm = (Stream)GCHandle.FromIntPtr(pinst->source).Target !;

            stm.Flush();

            return(S_OK);
        }
Esempio n. 2
0
        public int SetSize(IStreamImpl *pinst, ULARGE_INTEGER libNewSize)
        {
            var stm = (Stream)GCHandle.FromIntPtr(pinst->source).Target !;

            stm.SetLength((long)libNewSize.QuadPart + pinst->offset);

            return(S_OK);
        }
Esempio n. 3
0
        public int Read(IStreamImpl *pinst, void *pv, uint cb, uint *pcbRead)
        {
            var stm = (Stream)GCHandle.FromIntPtr(pinst->source).Target !;

            *pcbRead = (uint)stm.Read(new Span <byte>(pv, (int)cb));

            return(S_OK);
        }
Esempio n. 4
0
        public int QueryInterface(IStreamImpl *pinst, Guid *riid, void **ppvObject)
        {
            var iid = *riid;

            if (iid == __uuidof <IStream>() || iid == __uuidof <ISequentialStream>() || iid == __uuidof <IUnknown>())
            {
                *ppvObject = pinst;
                return(S_OK);
            }

            return(E_NOINTERFACE);
        }
Esempio n. 5
0
        public int Stat(IStreamImpl *pinst, STATSTG *pstatstg, uint grfStatFlag)
        {
            var stm = (Stream)GCHandle.FromIntPtr(pinst->source).Target !;

            *pstatstg = new STATSTG {
                cbSize = new ULARGE_INTEGER {
                    QuadPart = (ulong)(stm.Length - pinst->offset)
                }, type = (uint)STGTY.STGTY_STREAM
            };

            return(S_OK);
        }
Esempio n. 6
0
        public int Write(IStreamImpl *pinst, void *pv, uint cb, uint *pcbWritten)
        {
            var stm = (Stream)GCHandle.FromIntPtr(pinst->source).Target !;

            stm.Write(new ReadOnlySpan <byte>(pv, (int)cb));

            if (pcbWritten is not null)
            {
                *pcbWritten = cb;
            }

            return(S_OK);
        }
Esempio n. 7
0
        public int Seek(IStreamImpl *pinst, LARGE_INTEGER dlibMove, uint dwOrigin, ULARGE_INTEGER *plibNewPosition)
        {
            long npos = dlibMove.QuadPart + (dwOrigin == (uint)SeekOrigin.Begin ? pinst->offset : 0);
            var  stm  = (Stream)GCHandle.FromIntPtr(pinst->source).Target !;

            long cpos = stm.Position;

            if (!(dwOrigin == (uint)SeekOrigin.Current && npos == 0) && !(dwOrigin == (uint)SeekOrigin.Begin && npos == cpos))
            {
                cpos = stm.Seek(npos, (SeekOrigin)dwOrigin);
            }

            if (plibNewPosition is not null)
            {
                plibNewPosition->QuadPart = (ulong)(cpos - pinst->offset);
            }

            return(S_OK);
        }
Esempio n. 8
0
 public uint Release(IStreamImpl *pinst) => 1;
Esempio n. 9
0
 public uint AddRef(IStreamImpl *pinst) => 1;
Esempio n. 10
0
 public int Clone(IStreamImpl *pinst, IStream **ppstm) => E_NOTIMPL;
Esempio n. 11
0
 public int UnlockRegion(IStreamImpl *pinst, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, uint dwLockType) => E_NOTIMPL;
Esempio n. 12
0
 public int Revert(IStreamImpl *pinst) => E_NOTIMPL;
Esempio n. 13
0
 public int CopyTo(IStreamImpl *pinst, IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten) => E_NOTIMPL;