Source code of Windows XP (NT5)
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

/*++
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();
}