MMSTRM.HXX
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Copyright (C) 1992 - 1997 Microsoft Corporation.
  4. //
  5. //  File:       mmstrm.hxx
  6. //
  7. //  Contents:   Memory Mapped Stream
  8. //
  9. //  Classes:    CMmStream, CMmStreamBuf
  10. //
  11. //
  12. //----------------------------------------------------------------------------
  13. #if !defined __MMSTRM_HXX__
  14. #define __MMSTRM_HXX__
  15. #include <pmmstrm.hxx>
  16. //+---------------------------------------------------------------------------
  17. //
  18. //  Class:      CMmStream
  19. //
  20. //  Purpose:    Memory Mapped Stream
  21. //
  22. //----------------------------------------------------------------------------
  23. class CMmStream: public PMmStream
  24. {
  25.     friend class CMmStreamBuf;
  26. public:
  27.     CMmStream();
  28.     CMmStream( WCHAR* wcsPath );
  29.     BOOL Ok() { return _hFile != INVALID_HANDLE_VALUE; }
  30.     virtual ~CMmStream();
  31.     void OpenRorW ( WCHAR* wcsPath );
  32.     void Open ( const WCHAR* wcsPath,
  33.                 ULONG modeAccess,
  34.                 ULONG modeShare,
  35.                 ULONG modeCreate,
  36.                 ULONG modeAttribute = FILE_ATTRIBUTE_NORMAL);
  37.     void Close();
  38.     void   SetSize ( PStorage& storage,
  39.                      ULONG newSizeLow,
  40.                      ULONG newSizeHigh=0 );
  41.     BOOL   isEmpty() { return _sizeHigh == 0 && _sizeLow == 0; }
  42.     ULONG  SizeLow() { return _sizeLow; }
  43.     ULONG  SizeHigh() { return _sizeHigh; }
  44.     LONGLONG Size() const
  45.     {
  46.         return llfromuls( _sizeLow, _sizeHigh );
  47.     }
  48.     BOOL   isWritable() { return _fWrite; }
  49.     void   MapAll ( CMmStreamBuf& sbuf );
  50.     void   Map ( CMmStreamBuf& sbuf,
  51.                          ULONG cb = 0,
  52.                          ULONG offLow = 0,
  53.                          ULONG offHigh = 0,
  54.                          BOOL  fMapForWrite = FALSE );
  55.     void   Unmap ( CMmStreamBuf& sbuf );
  56.     void   Flush ( CMmStreamBuf& sbuf, ULONG cb );
  57. protected:
  58.     HANDLE _hFile;
  59.     HANDLE _hMap;
  60.     ULONG  _sizeLow;
  61.     ULONG  _sizeHigh;
  62.     BOOL   _fWrite;
  63. };
  64. #endif