mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
4.2 KiB
194 lines
4.2 KiB
/*++
|
|
|
|
Copyright (c) 1991-2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
udfsa.hxx
|
|
|
|
Abstract:
|
|
|
|
This class supplies the UDF-only SUPERAREA methods.
|
|
|
|
Author:
|
|
|
|
Centis Biks (cbiks) 05-May-2000
|
|
|
|
--*/
|
|
|
|
#pragma once
|
|
|
|
#include "supera.hxx"
|
|
#include "hmem.hxx"
|
|
#include "ScanADs.hxx"
|
|
|
|
DECLARE_CLASS( UDF_SA );
|
|
|
|
class UDF_SA : public SUPERAREA {
|
|
|
|
public:
|
|
|
|
UUDF_EXPORT
|
|
DECLARE_CONSTRUCTOR(UDF_SA);
|
|
|
|
VIRTUAL
|
|
UUDF_EXPORT
|
|
~UDF_SA(
|
|
);
|
|
|
|
NONVIRTUAL
|
|
UUDF_EXPORT
|
|
BOOLEAN
|
|
Initialize(
|
|
IN OUT PLOG_IO_DP_DRIVE Drive,
|
|
IN OUT PMESSAGE Message,
|
|
IN USHORT FormatUDFRevision DEFAULT UDF_VERSION_201
|
|
);
|
|
|
|
NONVIRTUAL
|
|
PVOID
|
|
GetBuf(
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
Create(
|
|
IN PCNUMBER_SET BadSectors,
|
|
IN OUT PMESSAGE Message,
|
|
IN PCWSTRING Label DEFAULT NULL,
|
|
IN ULONG Flags DEFAULT FORMAT_BACKWARD_COMPATIBLE,
|
|
IN ULONG ClusterSize DEFAULT 0,
|
|
IN ULONG VirtualSize DEFAULT 0
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
VerifyAndFix(
|
|
IN FIX_LEVEL FixLevel,
|
|
IN OUT PMESSAGE Message,
|
|
IN ULONG Flags DEFAULT FALSE,
|
|
IN ULONG LogFileSize DEFAULT 0,
|
|
IN USHORT Algorithm DEFAULT 0,
|
|
OUT PULONG ExitStatus DEFAULT NULL,
|
|
IN PCWSTRING DriveLetter DEFAULT NULL
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
RecoverFile(
|
|
IN PCWSTRING FullPathFileName,
|
|
IN OUT PMESSAGE Message
|
|
);
|
|
|
|
NONVIRTUAL
|
|
PARTITION_SYSTEM_ID
|
|
QuerySystemId(
|
|
) CONST;
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
BOOL Read
|
|
(
|
|
IN ULONGLONG StartingSector,
|
|
IN SECTORCOUNT NumberOfSectors,
|
|
OUT PVOID Buffer
|
|
);
|
|
|
|
BOOL Write
|
|
(
|
|
IN ULONGLONG StartingSector,
|
|
IN SECTORCOUNT NumberOfSectors,
|
|
OUT PVOID Buffer
|
|
);
|
|
|
|
ULONG QuerySectorSize() CONST;
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
BOOL ReadDescriptor( ULONGLONG blockNr, UINT* pNrBlocksRead, USHORT expectedTagId, USHORT* pTagId, LPBYTE* pMem );
|
|
BOOL FindVolumeDescriptor( USHORT TagID, LPBYTE* DescriptorFound );
|
|
|
|
|
|
//
|
|
// This was added as a virtual funtion in SUPERAREA so we need
|
|
// to implement it in order to compile....
|
|
//
|
|
|
|
NONVIRTUAL
|
|
VOID
|
|
PrintFormatReport (
|
|
IN OUT PMESSAGE Message,
|
|
IN PFILE_FS_SIZE_INFORMATION FsSizeInfo,
|
|
IN PFILE_FS_VOLUME_INFORMATION FsVolInfo
|
|
);
|
|
|
|
private:
|
|
|
|
//
|
|
// Format routines.
|
|
//
|
|
|
|
BOOLEAN
|
|
FormatVolumeRecognitionSequence();
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
NONVIRTUAL
|
|
VOID
|
|
Construct(
|
|
);
|
|
|
|
NONVIRTUAL
|
|
VOID
|
|
Destroy(
|
|
);
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
BOOL ReadVolumeRecognitionSequence();
|
|
BOOL GetAnchorVolumeDescriptorPointer( PNSR_ANCHOR pavdp );
|
|
BOOL ReadAnchorVolumeDescriptorPointer( UINT Sector, PNSR_ANCHOR NsrAnchorFound );
|
|
BOOL FindVolumeDescriptor( USHORT TagID, ULONGLONG ExtentStart, UINT ExtentLength, LPBYTE* DescriptorFound );
|
|
|
|
NSR_ANCHOR _NsrAnchor;
|
|
USHORT _FormatUDFRevision;
|
|
|
|
HMEM _hmem;
|
|
|
|
};
|
|
|
|
BOOL VerifyDescriptorTag( LPBYTE buffer, UINT bufferLength, USHORT expectedTagId, PUSHORT pExportTagId );
|
|
BOOL VerifyDescriptor( LPBYTE buffer, UINT numberOfBytesRead, USHORT expectedTagId, USHORT* pExportTagId );
|
|
BOOL GetLengthOfDescriptor( LPBYTE, PUINT );
|
|
|
|
INLINE
|
|
PVOID
|
|
UDF_SA::GetBuf(
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine returns a pointer to the write buffer for the UDF
|
|
SUPERAREA.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
A pointer to the write buffer.
|
|
|
|
--*/
|
|
{
|
|
return SECRUN::GetBuf();
|
|
}
|