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.
 
 
 
 
 
 

205 lines
4.9 KiB

//+-------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1996.
//
// File: stream.hxx
//
// Contents: Stream header for mstream project
//
// Classes: CSStream - single linear stream for MSF
//
//--------------------------------------------------------------------
#ifndef __STREAM_HXX__
#define __STREAM_HXX__
#include "msf.hxx"
#include "handle.hxx"
#include "entry.hxx"
//+---------------------------------------------------------------------------
//
// Class: CStreamCache (stmc)
//
// Purpose: Cache for stream optimization
//
// Interface: See below.
//
//----------------------------------------------------------------------------
class CStreamCache
{
public:
inline CStreamCache();
inline void SetCache(ULONG ulOffset, SECT sect);
inline ULONG GetOffset(void) const;
inline SECT GetSect(void) const;
private:
ULONG _ulOffset;
SECT _sect;
};
//+---------------------------------------------------------------------------
//
// Member: CStreamCache::CStreamCache, public
//
// Synopsis: CStreamCache constructor
//
//----------------------------------------------------------------------------
inline CStreamCache::CStreamCache()
{
_ulOffset = MAX_ULONG;
_sect = ENDOFCHAIN;
}
//+---------------------------------------------------------------------------
//
// Member: CStreamCache::SetCache, public
//
// Synopsis: Set the cache information
//
// Arguments: [ulOffset] -- Offset into chain
// [sect] -- Sect at that offset
//
//----------------------------------------------------------------------------
inline void CStreamCache::SetCache(ULONG ulOffset, SECT sect)
{
_ulOffset = ulOffset;
_sect = sect;
}
//+---------------------------------------------------------------------------
//
// Member: CStreamCache::GetOffset, public
//
// Synopsis: Return offset
//
//----------------------------------------------------------------------------
inline ULONG CStreamCache::GetOffset(void) const
{
return _ulOffset;
}
//+---------------------------------------------------------------------------
//
// Member: CStreamCache::GetSect, public
//
// Synopsis: Return sect
//
//----------------------------------------------------------------------------
inline SECT CStreamCache::GetSect(void) const
{
return _sect;
}
//+----------------------------------------------------------------------
//
// Class: CDirectStream (ds)
//
// Purpose: Direct stream class
//
// Notes:
//
//-----------------------------------------------------------------------
class CDirectStream: public PEntry
{
public:
CDirectStream(DFLUID dl);
void InitSystem( CMStream *pms,
SID sid,
ULONGLONG cbSize);
SCODE Init( CStgHandle *pstgh,
CDfName const *pdfn,
BOOL const fCreate);
~CDirectStream();
void AddRef(VOID);
inline void DecRef(VOID);
void Release(VOID);
SCODE ReadAt( ULONGLONG ulOffset,
VOID HUGEP *pBuffer,
ULONG ulCount,
ULONG STACKBASED *pulRetval);
SCODE WriteAt( ULONGLONG ulOffset,
VOID const HUGEP *pBuffer,
ULONG ulCount,
ULONG STACKBASED *pulRetval);
SCODE SetSize(ULONGLONG ulNewSize);
void GetSize(ULONGLONG *pulSize);
// PEntry
virtual SCODE GetTime(WHICHTIME wt, TIME_T *ptm);
virtual SCODE SetTime(WHICHTIME wt, TIME_T tm);
inline CStmHandle *GetHandle(void);
private:
CStmHandle _stmh;
CStreamCache _stmc;
ULONGLONG _ulSize;
ULONGLONG _ulOldSize;
LONG _cReferences;
#ifdef _MSC_VER
#pragma warning(disable:4512)
// default assignment operator could not be generated since we have a const
// member variable (of PEntry). This is okay since we are not using
// the assignment operator anyway.
#endif // MSC_VER
};
#ifdef _MSC_VER
#pragma warning(default:4512)
#endif // _MSC_VER
//+---------------------------------------------------------------------------
//
// Member: CDirectStream::GetHandle, public
//
// Synopsis: Returns a pointer to the stream handle
//
//----------------------------------------------------------------------------
inline CStmHandle *CDirectStream::GetHandle(void)
{
return &_stmh;
}
//+---------------------------------------------------------------------------
//
// Member: CDirectStream::DecRef, public
//
// Synopsis: Decrements the ref count
//
//----------------------------------------------------------------------------
inline void CDirectStream::DecRef(void)
{
AtomicDec(&_cReferences);
}
#endif //__SSTREAM_HXX__