windows-nt/Source/XPSP1/NT/base/efiutil/efilib/inc/rootdir.hxx

197 lines
3 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
rootdir.hxx
Abstract:
This class is an implementation of FATDIR for the FAT root directory.
--*/
#if !defined(ROOTDIR_DEFN)
#define ROOTDIR_DEFN
#include "drive.hxx"
#include "fatdir.hxx"
#include "mem.hxx"
#include "secrun.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
DECLARE_CLASS( ROOTDIR );
class ROOTDIR : public FATDIR {
public:
UFAT_EXPORT
DECLARE_CONSTRUCTOR( ROOTDIR );
UFAT_EXPORT
VIRTUAL
~ROOTDIR(
);
NONVIRTUAL
UFAT_EXPORT
BOOLEAN
Initialize(
IN PMEM Mem,
IN OUT PLOG_IO_DP_DRIVE Drive,
IN LBN StartingSector,
IN LONG NumberOfEntries
);
NONVIRTUAL
BOOLEAN
Read(
);
NONVIRTUAL
BOOLEAN
Write(
);
NONVIRTUAL
PVOID
GetDirEntry(
IN LONG EntryNumber
);
NONVIRTUAL
LONG
QueryNumberOfEntries(
);
private:
VOID
Construct (
);
NONVIRTUAL
VOID
Destroy(
);
SECRUN _secrun;
LONG _number_of_entries;
};
INLINE
BOOLEAN
ROOTDIR::Read(
)
/*++
Routine Description:
This routine reads the directory in from the disk.
Arguments:
None.
Return Value:
FALSE - Failure.
TRUE - Success.
--*/
{
return _secrun.Read();
}
INLINE
BOOLEAN
ROOTDIR::Write(
)
/*++
Routine Description:
This routine writes the drirectory to the disk.
Arguments:
None.
Return Value:
FALSE - Failure.
TRUE - Success.
--*/
{
return _secrun.Write();
}
INLINE
PVOID
ROOTDIR::GetDirEntry(
IN LONG EntryNumber
)
/*++
Routine Description:
This routine returns a pointer to the beginning of the requested
directory entry. The data may then be interpreted with a fat
directory entry object. The return value will be NULL if a request
for a directory entry is beyond the size of the directory.
Arguments:
EntryNumber - The desired entry number. The entries will be numbered
0, 1, 2, ... , n-1.
Return Value:
A pointer to the beginning of a directory entry or NULL.
--*/
{
return (EntryNumber < _number_of_entries) ?
(PCHAR) _secrun.GetBuf() + BytesPerDirent*EntryNumber : NULL;
}
INLINE
LONG
ROOTDIR::QueryNumberOfEntries(
)
/*++
Routine Description:
This routine returns the number of entries in the directory.
Arguments:
None.
Return Value:
The number of entries in the directory.
--*/
{
return _number_of_entries;
}
#endif // ROOTDIR_DEFN