/*++ Copyright (c) 1996 Microsoft Corporation Module Name: stream.h Abstract: This module contains the definition for the Server Extension Object Stream class. Author: Don Dumitru (dondu@microsoft.com) Revision History: dondu 03/29/97 created --*/ // stream.h : Declaration of the CSEOStream ///////////////////////////////////////////////////////////////////////////// // CStream class ATL_NO_VTABLE __declspec(uuid("2DF59671-3D15-11d1-AA51-00AA006BC80B")) CSEOStream : public CComObjectRoot, public IStream // , public CComCoClass { public: HRESULT FinalConstruct(); void FinalRelease(); void Cleanup(); HRESULT Init(HANDLE hFile, LPCSTR pszFile, ULARGE_INTEGER libOffset, CSEOStream *pSubStream); HRESULT Init(HANDLE hFile, LPCWSTR pszFile, ULARGE_INTEGER libOffset, CSEOStream *pSubStream); HRESULT Open(); HRESULT ReadOffset(void *pv, ULONG cb, ULONG *pcbRead, ULARGE_INTEGER *plibOffset); HRESULT WriteOffset(void const* pv, ULONG cb, ULONG *pcbWritten, ULARGE_INTEGER *plibOffset); HRESULT GetSize(ULARGE_INTEGER *plibSize); HRESULT CopyToOffset(IStream *pstm, ULARGE_INTEGER libOffset, ULARGE_INTEGER *plibRead, ULARGE_INTEGER *plibWritten, ULARGE_INTEGER *plibOffset); HRESULT CloneOffset(IStream **pstm, ULARGE_INTEGER libOffset); static HRESULT CreateInstance(HANDLE hFile, LPCSTR pszFile, ULARGE_INTEGER libOffset, CSEOStream *pSubStream, IStream **ppStream); static HRESULT CreateInstance(HANDLE hFile, LPCWSTR pszFile, ULARGE_INTEGER libOffset, CSEOStream *pSubStream, IStream **ppStream); DECLARE_PROTECT_FINAL_CONSTRUCT(); DECLARE_NOT_AGGREGATABLE(CSEOStream); // DECLARE_REGISTRY_RESOURCEID_EX(IDR_StdAfx, // L"SMTP IStream Class", // L"SMTP.IStream.1", // L"SMTP.IStream"); DECLARE_GET_CONTROLLING_UNKNOWN(); BEGIN_COM_MAP(CSEOStream) COM_INTERFACE_ENTRY(IStream) COM_INTERFACE_ENTRY_IID(__uuidof(CSEOStream),CSEOStream) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p) END_COM_MAP() // IStream public: HRESULT STDMETHODCALLTYPE Read(void *pv, ULONG cb, ULONG *pcbRead); HRESULT STDMETHODCALLTYPE Write(void const* pv, ULONG cb, ULONG *pcbWritten); HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *pdlibNewPosition); HRESULT STDMETHODCALLTYPE SetSize(ULARGE_INTEGER libNewSize); HRESULT STDMETHODCALLTYPE CopyTo(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten); HRESULT STDMETHODCALLTYPE Commit(DWORD grfCommitFlags); HRESULT STDMETHODCALLTYPE Revert(void); HRESULT STDMETHODCALLTYPE LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); HRESULT STDMETHODCALLTYPE UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); HRESULT STDMETHODCALLTYPE Stat(STATSTG * pstatstg, DWORD grfStatFlag); HRESULT STDMETHODCALLTYPE Clone(IStream **pstm); private: HANDLE m_hFile; LPSTR m_pszFile; ULARGE_INTEGER m_libOffset; HANDLE m_hEvent; CSEOStream *m_pSubStream; CComPtr m_pUnkMarshaler; };