Leaked source code of windows server 2003
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

  1. // --------------------------------------------------------------------------------
  2. // Bytestm.h
  3. // Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  4. // Steven J. Bailey
  5. // --------------------------------------------------------------------------------
  6. #ifndef __BYTESTM_H
  7. #define __BYTESTM_H
  8. // -----------------------------------------------------------------------------
  9. // Acquire Byte Stream Data Types
  10. // -----------------------------------------------------------------------------
  11. typedef enum tagACQUIRETYPE {
  12. ACQ_COPY, // Don't reset the object (CByteStream will free m_pbData)
  13. ACQ_DISPLACE // ResetObject after acquire, the caller owns the bits
  14. } ACQUIRETYPE;
  15. // -----------------------------------------------------------------------------
  16. // CByteStream
  17. // -----------------------------------------------------------------------------
  18. class CByteStream : public IStream
  19. {
  20. public:
  21. // -------------------------------------------------------------------------
  22. // Construction
  23. // -------------------------------------------------------------------------
  24. CByteStream(LPBYTE pb=NULL, ULONG cb=0);
  25. ~CByteStream(void);
  26. // -------------------------------------------------------------------------
  27. // IUnknown
  28. // -------------------------------------------------------------------------
  29. STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  30. STDMETHODIMP_(ULONG) AddRef(void);
  31. STDMETHODIMP_(ULONG) Release(void);
  32. // -------------------------------------------------------------------------
  33. // IStream
  34. // -------------------------------------------------------------------------
  35. STDMETHODIMP Read(LPVOID, ULONG, ULONG *);
  36. STDMETHODIMP Seek(LARGE_INTEGER, DWORD, ULARGE_INTEGER *);
  37. STDMETHODIMP Stat(STATSTG *, DWORD);
  38. STDMETHODIMP Write(const void *, ULONG, ULONG *);
  39. STDMETHODIMP SetSize(ULARGE_INTEGER);
  40. STDMETHODIMP Commit(DWORD) { return S_OK; }
  41. STDMETHODIMP CopyTo(LPSTREAM, ULARGE_INTEGER, ULARGE_INTEGER *, ULARGE_INTEGER *) { return E_NOTIMPL; }
  42. STDMETHODIMP Revert(void) { return E_NOTIMPL; }
  43. STDMETHODIMP LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) { return E_NOTIMPL; }
  44. STDMETHODIMP UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) { return E_NOTIMPL; }
  45. STDMETHODIMP Clone(LPSTREAM *) { return E_NOTIMPL; }
  46. // -------------------------------------------------------------------------
  47. // CByteStream Methods
  48. // -------------------------------------------------------------------------
  49. void AcquireBytes(ULONG *pcb, LPBYTE *ppb, ACQUIRETYPE actype);
  50. HRESULT HrAcquireStringA(ULONG *pcch, LPSTR *ppszStringA, ACQUIRETYPE actype);
  51. HRESULT HrAcquireStringW(ULONG *pcch, LPWSTR *ppszStringW, ACQUIRETYPE actype);
  52. private:
  53. // -------------------------------------------------------------------------
  54. // Private Methods
  55. // -------------------------------------------------------------------------
  56. void ResetObject(void);
  57. HRESULT _HrGrowBuffer(ULONG cbNeeded, ULONG cbExtra);
  58. private:
  59. // -------------------------------------------------------------------------
  60. // Private Data
  61. // -------------------------------------------------------------------------
  62. ULONG m_cRef; // Reference count
  63. ULONG m_cbData; // Number of valid bytes in m_pbData
  64. ULONG m_cbAlloc; // Current allocated size of m_pbData
  65. ULONG m_iData; // Current data index
  66. LPBYTE m_pbData; // Pointer to data buffer
  67. };
  68. #endif // __BYTESTM_H