197 lines
3 KiB
C++
197 lines
3 KiB
C++
|
/*++
|
||
|
|
||
|
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
|