|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
#nullable disable
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using STATSTG = System.Runtime.InteropServices.ComTypes.STATSTG;
namespace Microsoft.DiaSymReader
{
/// <summary>
/// This is a re-definition of COM's IStream interface. The important change is that
/// the Read and Write methods take an <see cref="IntPtr"/> instead of a byte[] to avoid the
/// allocation cost when called from native code.
/// </summary>
[Guid("0000000c-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), ComImport]
internal unsafe interface IUnsafeComStream
{
// ISequentialStream portion
void Read(byte* pv, int cb, int* pcbRead);
void Write(byte* pv, int cb, int* pcbWritten);
// IStream portion
void Seek(long dlibMove, int dwOrigin, long* plibNewPosition);
void SetSize(long libNewSize);
void CopyTo(IStream pstm, long cb, int* pcbRead, int* pcbWritten);
void Commit(int grfCommitFlags);
void Revert();
void LockRegion(long libOffset, long cb, int dwLockType);
void UnlockRegion(long libOffset, long cb, int dwLockType);
void Stat(out STATSTG pstatstg, int grfStatFlag);
void Clone(out IStream ppstm);
}
}
|