windows-nt/Source/XPSP1/NT/com/ole32/ih/utstream.h
2020-09-26 16:20:57 +08:00

208 lines
6.6 KiB
C++

//+----------------------------------------------------------------------------
//
// File:
// utstream.h
//
// Contents:
// Ole stream utility routines
//
// Classes:
//
// Functions:
//
// History:
// 12/07/93 - ChrisWe - file inspection and cleanup; removed
// redeclarations of ReadStringStream, and
// WriteStringStream which are declared in ole2sp.h;
// made default params on StSetSize explicit; removed
// signatures of obsolete (non-existent) atom reading and
// writing routines
//
//-----------------------------------------------------------------------------
#ifndef _UTSTREAM_H_
#define _UTSTREAM_H_
// REVIEW, isn't this obsolete now, as StWrite is?
FARINTERNAL_(HRESULT) StRead(IStream FAR * lpstream, LPVOID lpBuf, ULONG ulLen);
#define StWrite(lpstream, lpBuf, ulLen) lpstream->Write(lpBuf, ulLen, NULL)
//+----------------------------------------------------------------------------
//
// Function:
// StSetSize, internal
//
// Synopsis:
// Sets the size of the stream, using IStream::SetSize(). Saves
// the caller having to deal with the requisite ULARGE_INTEGER
// parameter, by initializing one from the [dwSize] argument.
//
// Arguments:
// [pstm] -- the stream to set the size of
// [dwSize] -- the size to set
// [fRelative] -- if TRUE, indicates that the size is [dwSize]
// plus the current seek position in the stream; if
// FALSE, sets [dwSize] as the absolute size
//
// Returns:
// HRESULT
//
// Notes:
// REVIEW, this seems crocked. When would you ever call
// this with [fRelative] == TRUE, and a non-zero [dwSize]?
//
// History:
// 12/07/93 - ChrisWe - file inspection and cleanup
//
//-----------------------------------------------------------------------------
FARINTERNAL StSetSize(LPSTREAM pstm, DWORD dwSize, BOOL fRelative);
// REVIEW, are the the following functions necessary anymore?
FARINTERNAL StSave10NativeData(IStorage FAR* pstgSave, HANDLE hNative,
BOOL fIsOle1Interop);
FARINTERNAL StRead10NativeData(IStorage FAR* pstgSave, HANDLE FAR *phNative);
FARINTERNAL StSave10ItemName(IStorage FAR* pstg, LPCSTR szItemName);
//+---------------------------------------------------------------------------
//
// Class: CStmBuf, Base class.
//
// Synopsis: Internal buffered Streams.
//
// Interfaces: CStmBuf - Constructor.
// ~CStmBuf - Destructor.
// Release - Release interface (used with OpenStream).
//
// History: 20-Feb-95 KentCe Created.
//
// Notes: This is a simple buffered class for internal use only.
//
//----------------------------------------------------------------------------
class CStmBuf
{
public:
CStmBuf();
~CStmBuf();
protected:
IStream * m_pStm; // Stream Interface to read/write.
BYTE m_aBuffer[256]; // Small read/write buffer.
PBYTE m_pBuffer; // Pointer into read/write buffer.
ULONG m_cBuffer; // Count of characters in read/write buffer.
};
//+---------------------------------------------------------------------------
//
// Class: CStmBufRead
//
// Synopsis: Internal buffered read of Streams.
//
// Interfaces: Init - Defines stream to read.
// OpenStream - Opens a stream for reading.
// Read - Read from the stream.
// ReadLong - Read a long value from the stream.
// Release - Release interface (used with OpenStream).
//
// History: 20-Feb-95 KentCe Created.
//
// Notes: This is a simple buffered read class for internal use only.
//
//----------------------------------------------------------------------------
class CStmBufRead : public CStmBuf
{
public:
void Init(IStream * pstm);
HRESULT OpenStream(IStorage * pstg, const OLECHAR * pwcsName);
HRESULT Read(PVOID pBuf, ULONG cBuf);
HRESULT ReadLong(LONG * plValue);
void Release();
private:
void Reset(void);
};
//+---------------------------------------------------------------------------
//
// Class: CStmBufWrite
//
// Synopsis: Internal buffered write of Streams.
//
// Interfaces: Init - Defines stream to write.
// OpenOrCreateStream - Opens/Creates a stream for writing.
// CreateStream - Creates a stream for writing.
// Write - Write to the stream.
// WriteLong - Write a long value to the stream.
// Flush - Flush buffer to the disk subsystem.
// Release - Release interface.
//
// History: 20-Feb-95 KentCe Created.
//
// Notes: This is a simple buffered write class for internal use only.
//
//----------------------------------------------------------------------------
class CStmBufWrite : public CStmBuf
{
public:
void Init(IStream * pstm);
HRESULT OpenOrCreateStream(IStorage * pstg, const OLECHAR * pwcsName);
HRESULT CreateStream(IStorage * pstg, const OLECHAR * pwcsName);
HRESULT Write(void const * pBuf, ULONG cBuf);
HRESULT WriteLong(LONG lValue);
HRESULT Flush(void);
void Release();
private:
void Reset(void);
};
//
// The following was moved from the ole2sp.h file to keep stream related API's
// in one place.
//
// Utility function not in the spec; in ole2.dll.
// Read and write length-prefixed strings. Open/Create stream.
// ReadStringStream does allocation, returns length of
// required buffer (strlen + 1 for terminating null)
STDAPI ReadStringStream( CStmBufRead & StmRead, LPOLESTR FAR * ppsz );
STDAPI WriteStringStream( CStmBufWrite & StmWrite, LPCOLESTR psz );
STDAPI OpenOrCreateStream( IStorage FAR * pstg, const OLECHAR FAR * pwcsName,
IStream FAR* FAR* ppstm);
//
// The following versions of StringStream are used with ANSI data
//
STDAPI ReadStringStreamA( CStmBufRead & StmRead, LPSTR FAR * ppsz );
// read and write ole control stream (in ole2.dll)
STDAPI WriteOleStg (LPSTORAGE pstg, IOleObject FAR* pOleObj,
DWORD dwReserved, LPSTREAM FAR* ppstmOut);
STDAPI WriteOleStgEx(LPSTORAGE pstg, IOleObject* pOleObj, DWORD dwReserved,
DWORD dwGivenFlags, LPSTREAM* ppstmOut);
STDAPI ReadOleStg (LPSTORAGE pstg, DWORD FAR* pdwFlags,
DWORD FAR* pdwOptUpdate, DWORD FAR* pdwReserved,
LPMONIKER FAR* ppmk, LPSTREAM FAR* pstmOut);
STDAPI ReadM1ClassStm(LPSTREAM pstm, CLSID FAR* pclsid);
STDAPI WriteM1ClassStm(LPSTREAM pstm, REFCLSID rclsid);
STDAPI ReadM1ClassStmBuf(CStmBufRead & StmRead, CLSID FAR* pclsid);
STDAPI WriteM1ClassStmBuf(CStmBufWrite & StmWrite, REFCLSID rclsid);
#endif // _UTSTREAM_H