mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
3.6 KiB
76 lines
3.6 KiB
// --------------------------------------------------------------------------------
|
|
// Bytestm.h
|
|
// Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
|
|
// Steven J. Bailey
|
|
// --------------------------------------------------------------------------------
|
|
#ifndef __BYTESTM_H
|
|
#define __BYTESTM_H
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Acquire Byte Stream Data Types
|
|
// -----------------------------------------------------------------------------
|
|
typedef enum tagACQUIRETYPE {
|
|
ACQ_COPY, // Don't reset the object (CByteStream will free m_pbData)
|
|
ACQ_DISPLACE // ResetObject after acquire, the caller owns the bits
|
|
} ACQUIRETYPE;
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// CByteStream
|
|
// -----------------------------------------------------------------------------
|
|
class CByteStream : public IStream
|
|
{
|
|
public:
|
|
// -------------------------------------------------------------------------
|
|
// Construction
|
|
// -------------------------------------------------------------------------
|
|
CByteStream(LPBYTE pb=NULL, ULONG cb=0);
|
|
~CByteStream(void);
|
|
|
|
// -------------------------------------------------------------------------
|
|
// IUnknown
|
|
// -------------------------------------------------------------------------
|
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
// -------------------------------------------------------------------------
|
|
// IStream
|
|
// -------------------------------------------------------------------------
|
|
STDMETHODIMP Read(LPVOID, ULONG, ULONG *);
|
|
STDMETHODIMP Seek(LARGE_INTEGER, DWORD, ULARGE_INTEGER *);
|
|
STDMETHODIMP Stat(STATSTG *, DWORD);
|
|
STDMETHODIMP Write(const void *, ULONG, ULONG *);
|
|
STDMETHODIMP SetSize(ULARGE_INTEGER);
|
|
STDMETHODIMP Commit(DWORD) { return S_OK; }
|
|
STDMETHODIMP CopyTo(LPSTREAM, ULARGE_INTEGER, ULARGE_INTEGER *, ULARGE_INTEGER *) { return E_NOTIMPL; }
|
|
STDMETHODIMP Revert(void) { return E_NOTIMPL; }
|
|
STDMETHODIMP LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) { return E_NOTIMPL; }
|
|
STDMETHODIMP UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) { return E_NOTIMPL; }
|
|
STDMETHODIMP Clone(LPSTREAM *) { return E_NOTIMPL; }
|
|
|
|
// -------------------------------------------------------------------------
|
|
// CByteStream Methods
|
|
// -------------------------------------------------------------------------
|
|
void AcquireBytes(ULONG *pcb, LPBYTE *ppb, ACQUIRETYPE actype);
|
|
HRESULT HrAcquireStringA(ULONG *pcch, LPSTR *ppszStringA, ACQUIRETYPE actype);
|
|
HRESULT HrAcquireStringW(ULONG *pcch, LPWSTR *ppszStringW, ACQUIRETYPE actype);
|
|
|
|
private:
|
|
// -------------------------------------------------------------------------
|
|
// Private Methods
|
|
// -------------------------------------------------------------------------
|
|
void ResetObject(void);
|
|
HRESULT _HrGrowBuffer(ULONG cbNeeded, ULONG cbExtra);
|
|
|
|
private:
|
|
// -------------------------------------------------------------------------
|
|
// Private Data
|
|
// -------------------------------------------------------------------------
|
|
ULONG m_cRef; // Reference count
|
|
ULONG m_cbData; // Number of valid bytes in m_pbData
|
|
ULONG m_cbAlloc; // Current allocated size of m_pbData
|
|
ULONG m_iData; // Current data index
|
|
LPBYTE m_pbData; // Pointer to data buffer
|
|
};
|
|
|
|
#endif // __BYTESTM_H
|