windows-nt/Source/XPSP1/NT/base/fs/utils/uudf/inc/udflvol.hxx
2020-09-26 16:20:57 +08:00

191 lines
3.8 KiB
C++

/*++
Copyright (c) 1991-2000 Microsoft Corporation
Module Name:
udflvol.hxx
Abstract:
This class supplies the UDF-only SUPERAREA methods.
Author:
Centis Biks (cbiks) 05-May-2000
--*/
#pragma once
#include "ScanADs.hxx"
DECLARE_CLASS( UDF_LVOL );
class UDF_LVOL : public OBJECT {
public:
UUDF_EXPORT
DECLARE_CONSTRUCTOR(UDF_LVOL);
VIRTUAL
UUDF_EXPORT
~UDF_LVOL();
NONVIRTUAL
UUDF_EXPORT
BOOLEAN
Initialize(
IN PUDF_SA UdfSA,
IN OUT PMESSAGE Message,
IN PNSR_LVOL LogicalVolumeDescriptor,
IN PNSR_PART PartitionDescriptor
);
//
//
//
BOOL CheckFileStructure();
BOOL ReadFileSetDescriptor();
BOOL ReadIcbDirectEntry( LONGAD*, USHORT*, PICBFILE*, OUT PULONGLONG BlockNum, OUT PUINT BlockSize, UINT );
BOOL ExpandDirectoryHierarchy( PICBFILE FileIcbEntry, BOOL isStreamDir, PUINT TotalFiles, PUINT TotalDirs, UINT ExpandDirRecursionCount );
BOOL ExpandFID( PNSR_FID NsrFid, BOOL isStreamDir, PUINT TotalFiles, PUINT TotalDirs, UINT ExpandDirRecursionCount );
//
//
//
BOOL Read(
IN ULONG StartingSector,
IN SECTORCOUNT NumberOfSectors,
OUT PVOID Buffer
);
BOOL Write(
IN ULONG StartingSector,
IN SECTORCOUNT NumberOfSectors,
OUT PVOID Buffer
);
ULONG QuerySectorSize() CONST;
//
//
//
BOOL MarkBlocksUsed
(
IN ULONGLONG StartingSector,
IN SECTORCOUNT NumberOfSectors
);
//
// UNDONE, CBiks, 8/9/2000
// This function should be private when I figure out the rest of the class hierarchy.
//
ULONGLONG
TranslateBlockNum
(
ULONG Lbn,
USHORT Partition
);
private:
//
//
//
NONVIRTUAL
VOID
Construct(
);
NONVIRTUAL
VOID
Destroy(
);
BOOL ReadSpaceBitmapDescriptor();
BOOL
VerifySBDAllocation
(
PNSR_SBD SBDOriginal,
PNSR_SBD SBDNew
);
//
//
//
BOOL
CreateLostClusterFile
(
ULONG StartSector,
ULONG EndSector,
PNSR_SBD SBDOriginal,
PNSR_SBD SBDNew
);
BOOL
UDF_LVOL::CreateFID
(
PICBFILE IcbDirectoryParent,
PICBEXTFILE IcbFile,
PCWSTR FileName,
PNSR_FID* NewNsrFID,
ULONG StartLbn,
USHORT StartPartition,
ULONG Length
);
BOOL
FindAvailableFID
(
PICBFILE IcbFileEntry,
ULONG RequestedFIDSize
);
BOOL
FindAvailableSector
(
PNSR_SBD SBDOriginal,
PNSR_SBD SBDNew,
PULONG SectorAvailable
);
BOOL
CreateICBFileEntry
(
PICBEXTFILE* ICBCheckFile,
ULONG StartSector,
ULONG EndSector,
PNSR_SBD SBDOriginal,
PNSR_SBD SBDNew
);
//
//
//
PMESSAGE _Message;
PUDF_SA _UdfSA;
PNSR_LVOL _LogicalVolumeDescriptor;
PNSR_PART _PartitionDescriptor;
PNSR_FSD _FileSetDescriptor;
PICBFILE _RootIcbFileEntry;
PNSR_INTEG _LogicalVolumeIntegrityDescriptor;
PNSR_SBD _SpaceBitmapDescriptor;
PNSR_SBD _NewSpaceBitmapDescriptor;
};