/*++ Copyright (c) 2000 Microsoft Corporation Module Name: CMemoryStream.h Abstract: Minimal implementation of IStream over an array of bytes. Author: Jay Krell (a-JayK) May 2000 Revision History: --*/ #pragma once #include "objidl.h" #include "fusiontrace.h" class CMemoryStream : public IStream { public: CMemoryStream(); BOOL Initialize(const BYTE*, const BYTE*); virtual ~CMemoryStream(); // IUnknown methods: ULONG __stdcall AddRef(); ULONG __stdcall Release(); HRESULT __stdcall QueryInterface(REFIID riid, LPVOID *ppvObj); // ISequentialStream methods: HRESULT __stdcall Read(void *pv, ULONG cb, ULONG *pcbRead); HRESULT __stdcall Write(void const *pv, ULONG cb, ULONG *pcbWritten); // IStream methods: HRESULT __stdcall Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition); HRESULT __stdcall SetSize(ULARGE_INTEGER libNewSize); HRESULT __stdcall CopyTo(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten); HRESULT __stdcall Commit(DWORD grfCommitFlags); HRESULT __stdcall Revert(); HRESULT __stdcall LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); HRESULT __stdcall UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); HRESULT __stdcall Stat(STATSTG *pstatstg, DWORD grfStatFlag); HRESULT __stdcall Clone(IStream **ppIStream); protected: LONG m_cRef; const BYTE *m_pbCurrent; const BYTE *m_pbBegin; const BYTE *m_pbEnd; private: // intentionally not implemented CMemoryStream(const CMemoryStream &r); CMemoryStream &operator =(const CMemoryStream &r); }; inline CMemoryStream::CMemoryStream( ) : m_cRef(0), m_pbCurrent(NULL), m_pbBegin(NULL), m_pbEnd(NULL) { } inline BOOL CMemoryStream::Initialize( const BYTE *pbBegin, const BYTE *pbEnd ) { m_pbBegin = pbBegin; m_pbEnd = pbEnd; m_pbCurrent = pbBegin; return TRUE; }