226 lines
3.9 KiB
C++
226 lines
3.9 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1990 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
eaheader.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This class models the header and tables of the EA file.
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
Luckily all the structures are well aligned.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#if !defined(EA_HEADER_DEFN)
|
||
|
|
||
|
#define EA_HEADER_DEFN
|
||
|
|
||
|
#include "cluster.hxx"
|
||
|
|
||
|
#if defined ( _AUTOCHECK_ ) || defined( _EFICHECK_ )
|
||
|
#define UFAT_EXPORT
|
||
|
#elif defined ( _UFAT_MEMBER_ )
|
||
|
#define UFAT_EXPORT __declspec(dllexport)
|
||
|
#else
|
||
|
#define UFAT_EXPORT __declspec(dllimport)
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Forward references
|
||
|
//
|
||
|
|
||
|
DECLARE_CLASS( EA_HEADER );
|
||
|
DECLARE_CLASS( FAT );
|
||
|
DECLARE_CLASS( FAT_SA );
|
||
|
DECLARE_CLASS( LOG_IO_DP_DRIVE );
|
||
|
DECLARE_CLASS( MEM );
|
||
|
|
||
|
|
||
|
struct _EA_FILE_HEADER {
|
||
|
USHORT Signature;
|
||
|
USHORT FormatType;
|
||
|
USHORT LogType;
|
||
|
USHORT Cluster1;
|
||
|
USHORT NewCValue1;
|
||
|
USHORT Cluster2;
|
||
|
USHORT NewCValue2;
|
||
|
USHORT Cluster3;
|
||
|
USHORT NewCValue3;
|
||
|
USHORT Handle;
|
||
|
USHORT NewHOffset;
|
||
|
UCHAR Reserved[10];
|
||
|
};
|
||
|
|
||
|
DEFINE_TYPE( struct _EA_FILE_HEADER, EA_FILE_HEADER );
|
||
|
|
||
|
CONST BaseTableSize = 240;
|
||
|
|
||
|
struct _EA_MAP_TBL {
|
||
|
USHORT BaseTab[BaseTableSize];
|
||
|
USHORT OffTab[1];
|
||
|
};
|
||
|
|
||
|
DEFINE_TYPE( struct _EA_MAP_TBL, EA_MAP_TBL );
|
||
|
|
||
|
struct _EA_HEADER_AND_TABLE {
|
||
|
EA_FILE_HEADER Header;
|
||
|
EA_MAP_TBL Table;
|
||
|
};
|
||
|
|
||
|
DEFINE_TYPE( struct _EA_HEADER_AND_TABLE, EA_HEADER_AND_TABLE );
|
||
|
|
||
|
CONST USHORT HeaderSignature = 0x4445;
|
||
|
CONST USHORT CurrentFormatType = 0;
|
||
|
CONST USHORT CurrentLogType = 0;
|
||
|
CONST USHORT Bit15 = 0x8000;
|
||
|
CONST USHORT InvalidHandle = 0xFFFF;
|
||
|
|
||
|
|
||
|
class EA_HEADER : public CLUSTER_CHAIN {
|
||
|
|
||
|
public:
|
||
|
UFAT_EXPORT
|
||
|
DECLARE_CONSTRUCTOR( EA_HEADER );
|
||
|
|
||
|
VIRTUAL
|
||
|
UFAT_EXPORT
|
||
|
~EA_HEADER(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
UFAT_EXPORT
|
||
|
BOOLEAN
|
||
|
Initialize(
|
||
|
IN OUT PMEM Mem,
|
||
|
IN OUT PLOG_IO_DP_DRIVE Drive,
|
||
|
IN PFAT_SA FatSuperArea,
|
||
|
IN PCFAT Fat,
|
||
|
IN ULONG StartingCluster,
|
||
|
IN ULONG LengthOfChain DEFAULT 0
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PEA_FILE_HEADER
|
||
|
GetEaFileHeader(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PEA_MAP_TBL
|
||
|
GetMapTable(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
LONG
|
||
|
QueryOffTabSize(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
UFAT_EXPORT
|
||
|
USHORT
|
||
|
QueryEaSetClusterNumber(
|
||
|
IN USHORT Handle
|
||
|
) CONST;
|
||
|
|
||
|
private:
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
Construct(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
Destroy(
|
||
|
);
|
||
|
|
||
|
PEA_HEADER_AND_TABLE _ht;
|
||
|
LONG _off_tab_size;
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
PEA_FILE_HEADER
|
||
|
EA_HEADER::GetEaFileHeader(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine returns a pointer to the EA file header. Dereferencing
|
||
|
this pointer will allow the client to examine and modify the
|
||
|
EA file header. These changes will take effect on disk when the
|
||
|
client issues a 'Write' command.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
A pointer to the EA file header.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _ht ? &_ht->Header : NULL;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
PEA_MAP_TBL
|
||
|
EA_HEADER::GetMapTable(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine returns a pointer to the EA mapping table. Dereferencing
|
||
|
this pointer will allow the client to examine and modify the
|
||
|
EA mapping table. These changes will take effect on disk when the
|
||
|
client issues a 'Write' command.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
A pointer to the EA mapping table.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _ht ? &_ht->Table : NULL;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
LONG
|
||
|
EA_HEADER::QueryOffTabSize(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Computes the number of entries in the offset table.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
Returns the number of entries in the offset table.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _off_tab_size;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif // EA_HEADER_DEFN
|