using System; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; namespace Standard; internal sealed class ManagedIStream : IStream, IDisposable { public ManagedIStream(Stream source) { Verify.IsNotNull(source, "source"); this._source = source; } private void _Validate() { if (this._source == null) { throw new ObjectDisposedException("this"); } } [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "Standard.HRESULT.ThrowIfFailed(System.String)")] [Obsolete("The method is not implemented", true)] public void Clone(out IStream ppstm) { ppstm = null; HRESULT.STG_E_INVALIDFUNCTION.ThrowIfFailed("The method is not implemented."); } public void Commit(int grfCommitFlags) { this._Validate(); this._source.Flush(); } [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0")] public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten) { Verify.IsNotNull(pstm, "pstm"); this._Validate(); byte[] array = new byte[4096]; long num; int num2; for (num = 0L; num < cb; num += (long) num2) { num2 = this._source.Read(array, 0, array.Length); if (num2 == 0) { break; } pstm.Write(array, num2, IntPtr.Zero); } if (IntPtr.Zero != pcbRead) { Marshal.WriteInt64(pcbRead, num); } if (IntPtr.Zero != pcbWritten) { Marshal.WriteInt64(pcbWritten, num); } } [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "Standard.HRESULT.ThrowIfFailed(System.String)")] [Obsolete("The method is not implemented", true)] public void LockRegion(long libOffset, long cb, int dwLockType) { HRESULT.STG_E_INVALIDFUNCTION.ThrowIfFailed("The method is not implemented."); } [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public void Read(byte[] pv, int cb, IntPtr pcbRead) { this._Validate(); int val = this._source.Read(pv, 0, cb); if (IntPtr.Zero != pcbRead) { Marshal.WriteInt32(pcbRead, val); } } [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "Standard.HRESULT.ThrowIfFailed(System.String)")] [Obsolete("The method is not implemented", true)] public void Revert() { HRESULT.STG_E_INVALIDFUNCTION.ThrowIfFailed("The method is not implemented."); } [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition) { this._Validate(); long val = this._source.Seek(dlibMove, (SeekOrigin) dwOrigin); if (IntPtr.Zero != plibNewPosition) { Marshal.WriteInt64(plibNewPosition, val); } } public void SetSize(long libNewSize) { this._Validate(); this._source.SetLength(libNewSize); } public void Stat(out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, int grfStatFlag) { pstatstg = default(System.Runtime.InteropServices.ComTypes.STATSTG); this._Validate(); pstatstg.type = 2; pstatstg.cbSize = this._source.Length; pstatstg.grfMode = 2; pstatstg.grfLocksSupported = 2; } [Obsolete("The method is not implemented", true)] [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "Standard.HRESULT.ThrowIfFailed(System.String)")] public void UnlockRegion(long libOffset, long cb, int dwLockType) { HRESULT.STG_E_INVALIDFUNCTION.ThrowIfFailed("The method is not implemented."); } [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public void Write(byte[] pv, int cb, IntPtr pcbWritten) { this._Validate(); this._source.Write(pv, 0, cb); if (IntPtr.Zero != pcbWritten) { Marshal.WriteInt32(pcbWritten, cb); } } public void Dispose() { this._source = null; } private const int STGTY_STREAM = 2; private const int STGM_READWRITE = 2; private const int LOCK_EXCLUSIVE = 2; private Stream _source; }