|
|
/*++
Copyright (c) 1991-2000 Microsoft Corporation
Module Name:
filestrm.hxx
Abstract:
This module contains the declaration for the FILE_STREAM class. The FILE_STREAM is an abstract class derived from BUFFER_STREAM, that models a file as a stream of data. A FILE_STREAM class has the concept of a pointer (file poiter), and it provides some methods that allow operations on this pointer, such as:
.move file pointer to a particular position; .read/write byte in a particular position; .query the position of the file pointer;
The only way that a client has to create a FILE_STREAM is through QueryStream() (a method in FSN_FILE). FILE_STREAM can be has a method for initialization with two different signatures. In one case, a PFSN_FILE is passed as parameter. This initialization is used by QueryStream(). The other signature allows that a HANDLE is passed as parameter. This initialization is used by GetStandardStream() during the initialization of ulib.
Author:
Jaime Sasson (jaimes) 21-Mar-1991
Environment:
ULIB, User Mode
--*/
#if !defined( _FILE_STREAM_ )
#define _FILE_STREAM_
#include "bufstrm.hxx"
enum SEEKORIGIN { STREAM_BEGINNING, STREAM_CURRENT, STREAM_END };
//
// Forward references
//
DECLARE_CLASS( FILE_STREAM ); DECLARE_CLASS( FSN_FILE );
class FILE_STREAM : public BUFFER_STREAM {
friend class FSN_FILE; friend class COMM_DEVICE; friend PSTREAM GetStandardStream( HANDLE, STREAMACCESS );
public:
ULIB_EXPORT DECLARE_CAST_MEMBER_FUNCTION( FILE_STREAM );
VIRTUAL ~FILE_STREAM( );
VIRTUAL BOOLEAN MovePointerPosition( IN LONGLONG Position, IN SEEKORIGIN Origin );
VIRTUAL STREAMACCESS QueryAccess( ) CONST;
VIRTUAL BOOLEAN QueryPointerPosition( OUT PULONGLONG Position );
NONVIRTUAL BOOLEAN Read( OUT PBYTE Buffer, IN ULONG NumberOfBytesToRead, OUT PULONG NumberOfBytesRead );
NONVIRTUAL ULIB_EXPORT BOOLEAN ReadAt( OUT PBYTE Buffer, IN ULONG BytesToRead, IN LONGLONG Position, IN SEEKORIGIN Origin, OUT PULONG BytesRead );
NONVIRTUAL BOOLEAN Write( IN PCBYTE Buffer, IN ULONG BytesToWrite, OUT PULONG BytesWritten );
NONVIRTUAL BOOLEAN WriteAt( OUT PBYTE Buffer, IN ULONG BytesToWrite, IN LONGLONG Position, IN SEEKORIGIN Origin, OUT PULONG BytesWritten );
protected:
DECLARE_CONSTRUCTOR( FILE_STREAM );
NONVIRTUAL BOOLEAN Initialize( PCFSN_FILE File, STREAMACCESS Access, DWORD Attributes DEFAULT 0 );
NONVIRTUAL BOOLEAN Initialize( HANDLE Handle, STREAMACCESS Access );
VIRTUAL BOOLEAN AdvanceBufferPointer( IN ULONG NumberOfBytes );
VIRTUAL BOOLEAN EndOfFile( ) CONST;
NONVIRTUAL BOOLEAN FillBuffer( IN PBYTE Buffer, IN ULONG BufferSize, OUT PULONG BytesRead );
NONVIRTUAL PCBYTE GetBuffer( PULONG BytesInBuffer );
VIRTUAL HANDLE QueryHandle( ) CONST;
private:
NONVIRTUAL VOID Construct( );
HANDLE _FileHandle; HANDLE _FileMappingHandle; STREAMACCESS _Access; BOOLEAN _EndOfFile; BOOLEAN _ShouldCloseHandle; PBYTE _FileBaseAddress; ULONG64 _FileSize; PBYTE _CurrentByte; BOOLEAN _EmptyFile; BOOLEAN _MemoryMappedFile; };
#endif // _FILE_STREAM_
|