1000 lines
17 KiB
C++
1000 lines
17 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1991 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
frsstruc.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This class models a file record segment structure.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Norbert P. Kusters (norbertk) 17-Sep-91
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
ULIB, User Mode
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#if !defined( _NTFS_FRS_STRUCTURE_DEFN_ )
|
||
|
|
||
|
#define _NTFS_FRS_STRUCTURE_DEFN_
|
||
|
|
||
|
#include "volume.hxx"
|
||
|
#include "ntfssa.hxx"
|
||
|
#include "tlink.hxx"
|
||
|
|
||
|
DECLARE_CLASS( NTFS_FRS_STRUCTURE );
|
||
|
DECLARE_CLASS( MEM );
|
||
|
DECLARE_CLASS( NTFS_ATTRIBUTE );
|
||
|
DECLARE_CLASS( LOG_IO_DP_DRIVE );
|
||
|
DECLARE_CLASS( NTFS_CLUSTER_RUN );
|
||
|
DECLARE_CLASS( WSTRING );
|
||
|
DECLARE_CLASS( MESSAGE );
|
||
|
DECLARE_CLASS( NTFS_ATTRIBUTE_COLUMNS );
|
||
|
DECLARE_CLASS( NTFS_ATTRIBUTE_LIST );
|
||
|
DECLARE_CLASS( NTFS_BITMAP );
|
||
|
DECLARE_CLASS( NTFS_UPCASE_TABLE );
|
||
|
|
||
|
class NTFS_FRS_STRUCTURE : public OBJECT {
|
||
|
|
||
|
public:
|
||
|
|
||
|
UNTFS_EXPORT
|
||
|
DECLARE_CONSTRUCTOR( NTFS_FRS_STRUCTURE );
|
||
|
|
||
|
VIRTUAL
|
||
|
UNTFS_EXPORT
|
||
|
~NTFS_FRS_STRUCTURE(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
Initialize(
|
||
|
IN OUT PMEM Mem,
|
||
|
IN OUT PNTFS_ATTRIBUTE MftData,
|
||
|
IN VCN FileNumber,
|
||
|
IN ULONG ClusterFactor,
|
||
|
IN BIG_INT VolumeSectors,
|
||
|
IN ULONG FrsSize,
|
||
|
IN PNTFS_UPCASE_TABLE UpcaseTable OPTIONAL
|
||
|
);
|
||
|
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
Initialize(
|
||
|
IN OUT PMEM Mem,
|
||
|
IN OUT PNTFS_ATTRIBUTE MftData,
|
||
|
IN VCN FirstFileNumber,
|
||
|
IN ULONG FrsCount,
|
||
|
IN ULONG ClusterFactor,
|
||
|
IN BIG_INT VolumeSectors,
|
||
|
IN ULONG FrsSize,
|
||
|
IN PNTFS_UPCASE_TABLE UpcaseTable
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
Initialize(
|
||
|
IN OUT PMEM Mem,
|
||
|
IN OUT PLOG_IO_DP_DRIVE Drive,
|
||
|
IN LCN StartOfMft,
|
||
|
IN ULONG ClusterFactor,
|
||
|
IN BIG_INT VolumeSectors,
|
||
|
IN ULONG FrsSize,
|
||
|
IN PNTFS_UPCASE_TABLE UpcaseTable DEFAULT NULL,
|
||
|
IN ULONG Offset DEFAULT 0
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
VerifyAndFix(
|
||
|
IN FIX_LEVEL FixLevel,
|
||
|
IN OUT PMESSAGE Message,
|
||
|
IN PCNTFS_ATTRIBUTE_COLUMNS AttributeDefTable OPTIONAL,
|
||
|
IN OUT PBOOLEAN DiskErrorsFound DEFAULT NULL
|
||
|
);
|
||
|
|
||
|
#if defined(LOCATE_DELETED_FILE)
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
LocateUnuseFrs(
|
||
|
IN FIX_LEVEL FixLevel,
|
||
|
IN OUT PMESSAGE Message,
|
||
|
IN PCNTFS_ATTRIBUTE_COLUMNS AttributeDefTable OPTIONAL,
|
||
|
IN OUT PBOOLEAN DiskErrorsFound DEFAULT NULL
|
||
|
);
|
||
|
#endif
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
LoneFrsAllocationCheck(
|
||
|
IN OUT PNTFS_BITMAP VolumeBitmap,
|
||
|
IN OUT PNTFS_CHKDSK_REPORT ChkdskReport,
|
||
|
IN OUT PNTFS_CHKDSK_INFO ChkdskInfo,
|
||
|
IN FIX_LEVEL FixLevel,
|
||
|
IN OUT PMESSAGE Message,
|
||
|
IN OUT PBOOLEAN DiskErrorsFound DEFAULT NULL
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
CheckInstanceTags(
|
||
|
IN FIX_LEVEL FixLevel,
|
||
|
IN BOOLEAN Verbose,
|
||
|
IN OUT PMESSAGE Message,
|
||
|
OUT PBOOLEAN Changes,
|
||
|
IN OUT PNTFS_ATTRIBUTE_LIST AttributeList DEFAULT NULL
|
||
|
);
|
||
|
|
||
|
VIRTUAL
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
Read(
|
||
|
);
|
||
|
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
ReadNext(
|
||
|
IN VCN FileNumber
|
||
|
);
|
||
|
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
ReadAgain(
|
||
|
IN VCN FileNumber
|
||
|
);
|
||
|
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
ReadSet(
|
||
|
IN OUT PTLINK Link
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
Write(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
UNTFS_EXPORT
|
||
|
PVOID
|
||
|
GetNextAttributeRecord(
|
||
|
IN PCVOID AttributeRecord,
|
||
|
IN OUT PMESSAGE Message DEFAULT NULL,
|
||
|
OUT PBOOLEAN ErrorsFound DEFAULT NULL
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
DeleteAttributeRecord(
|
||
|
IN OUT PVOID AttributeRecord
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
InsertAttributeRecord(
|
||
|
IN OUT PVOID Position,
|
||
|
IN PCVOID AttributeRecord
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
QueryAttributeList(
|
||
|
OUT PNTFS_ATTRIBUTE_LIST AttributeList
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PVOID
|
||
|
GetAttribute(
|
||
|
IN ULONG TypeCode
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PVOID
|
||
|
GetAttributeList(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
UpdateAttributeList(
|
||
|
IN PCNTFS_ATTRIBUTE_LIST AttributeList,
|
||
|
IN BOOLEAN WriteList
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
UNTFS_EXPORT
|
||
|
BOOLEAN
|
||
|
SafeQueryAttribute(
|
||
|
IN ATTRIBUTE_TYPE_CODE TypeCode,
|
||
|
IN OUT PNTFS_ATTRIBUTE MftData,
|
||
|
OUT PNTFS_ATTRIBUTE Attribute
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
MFT_SEGMENT_REFERENCE
|
||
|
QuerySegmentReference(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
FILE_REFERENCE
|
||
|
QueryBaseFileRecordSegment(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsBase(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsInUse(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
ClearInUse(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsSystemFile(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
SetSystemFile(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsViewIndexPresent(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
SetViewIndexPresent(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
ClearViewIndexPresent(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsIndexPresent(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
SetIndexPresent(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
ClearIndexPresent(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VCN
|
||
|
QueryFileNumber(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
ULONG
|
||
|
QueryClusterFactor(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
ULONG
|
||
|
QuerySize(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PLOG_IO_DP_DRIVE
|
||
|
GetDrive(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
SetFrsData(
|
||
|
IN VCN FileNumber,
|
||
|
IN PFILE_RECORD_SEGMENT_HEADER frsdata
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
USHORT
|
||
|
QueryReferenceCount(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
SetReferenceCount(
|
||
|
IN USHORT ReferenceCount
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BIG_INT
|
||
|
QueryVolumeSectors(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PNTFS_UPCASE_TABLE
|
||
|
GetUpcaseTable(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
SetUpcaseTable(
|
||
|
IN PNTFS_UPCASE_TABLE UpcaseTable
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
LSN
|
||
|
QueryLsn(
|
||
|
) CONST;
|
||
|
|
||
|
protected:
|
||
|
|
||
|
NONVIRTUAL
|
||
|
ULONG
|
||
|
QueryAvailableSpace(
|
||
|
);
|
||
|
|
||
|
PFILE_RECORD_SEGMENT_HEADER _FrsData;
|
||
|
|
||
|
private:
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
Sort(
|
||
|
OUT PBOOLEAN Changes,
|
||
|
OUT PBOOLEAN Duplicates
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
Construct(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
Destroy(
|
||
|
);
|
||
|
|
||
|
PSECRUN _secrun;
|
||
|
PNTFS_ATTRIBUTE _mftdata;
|
||
|
|
||
|
PNTFS_UPCASE_TABLE _upcase_table;
|
||
|
|
||
|
VCN _file_number;
|
||
|
VCN _first_file_number;
|
||
|
ULONG _frs_count;
|
||
|
BOOLEAN _frs_state;
|
||
|
BOOLEAN _read_status;
|
||
|
ULONG _cluster_factor;
|
||
|
ULONG _size;
|
||
|
PLOG_IO_DP_DRIVE _drive;
|
||
|
BIG_INT _volume_sectors;
|
||
|
UCHAR _usa_check;
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
MFT_SEGMENT_REFERENCE
|
||
|
NTFS_FRS_STRUCTURE::QuerySegmentReference(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine computes the segment reference value for this FRS.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The segment reference value for this FRS.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
MFT_SEGMENT_REFERENCE SegmentReference;
|
||
|
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
SegmentReference.LowPart = _file_number.GetLowPart();
|
||
|
SegmentReference.HighPart = (USHORT) _file_number.GetHighPart();
|
||
|
SegmentReference.SequenceNumber = _FrsData->SequenceNumber;
|
||
|
|
||
|
return SegmentReference;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
FILE_REFERENCE
|
||
|
NTFS_FRS_STRUCTURE::QueryBaseFileRecordSegment(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This field contains a pointer to the base file record segment for
|
||
|
this file record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
A FILE_REFERENCE to the base file record segment for this file
|
||
|
record segment.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
return _FrsData->BaseFileRecordSegment;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
BOOLEAN
|
||
|
NTFS_FRS_STRUCTURE::IsBase(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This method determines whether this File Record Segment is the
|
||
|
Base File Record Segment for its file.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE if this is a Base File Record Segment; FALSE otherwise.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return( _FrsData->BaseFileRecordSegment.LowPart == 0 &&
|
||
|
_FrsData->BaseFileRecordSegment.HighPart == 0 &&
|
||
|
_FrsData->BaseFileRecordSegment.SequenceNumber == 0 );
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
BOOLEAN
|
||
|
NTFS_FRS_STRUCTURE::IsInUse(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine computes whether or not this file record segment is in
|
||
|
use.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
FALSE - This file record segment is not in use.
|
||
|
TRUE - This file record segment is in use.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
return (_FrsData->Flags & FILE_RECORD_SEGMENT_IN_USE) ? TRUE : FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
VOID
|
||
|
NTFS_FRS_STRUCTURE::ClearInUse(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine clears the in use bit on this file record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
_FrsData->Flags &= ~FILE_RECORD_SEGMENT_IN_USE;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
BOOLEAN
|
||
|
NTFS_FRS_STRUCTURE::IsSystemFile(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine computes whether or not this file record segment is a
|
||
|
system file.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
FALSE - This file record segment is not a system file.
|
||
|
TRUE - This file record segment is a system file.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
return (_FrsData->Flags & FILE_SYSTEM_FILE) ? TRUE : FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
VOID
|
||
|
NTFS_FRS_STRUCTURE::SetSystemFile(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine sets the system file bit on this file record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
_FrsData->Flags |= FILE_SYSTEM_FILE;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
BOOLEAN
|
||
|
NTFS_FRS_STRUCTURE::IsViewIndexPresent(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine computes whether or not the indices of file record segment
|
||
|
can be viewed.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
FALSE - The indices of this file record segment cannot be viewed.
|
||
|
TRUE - The indices of this file record segment can be viewed.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
return (_FrsData->Flags & FILE_VIEW_INDEX_PRESENT) ? TRUE : FALSE;
|
||
|
}
|
||
|
|
||
|
INLINE
|
||
|
VOID
|
||
|
NTFS_FRS_STRUCTURE::SetViewIndexPresent(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine sets the view index present bit on this file record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
_FrsData->Flags |= FILE_VIEW_INDEX_PRESENT;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
VOID
|
||
|
NTFS_FRS_STRUCTURE::ClearViewIndexPresent(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine clears the view index present bit on this file record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
_FrsData->Flags &= ~FILE_VIEW_INDEX_PRESENT;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
BOOLEAN
|
||
|
NTFS_FRS_STRUCTURE::IsIndexPresent(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine computes whether or not this file record segment's
|
||
|
FILE_NAME_INDEX_PRESENT flag is set.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
FALSE - This file record segment's FILE_NAME_INDEX_PRESENT is NOT set.
|
||
|
TRUE - This file record segment's FILE_NAME_INDEX_PRESENT is set.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
return (_FrsData->Flags & FILE_FILE_NAME_INDEX_PRESENT) ? TRUE : FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
VOID
|
||
|
NTFS_FRS_STRUCTURE::ClearIndexPresent(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine clears the index present bit on this file record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
_FrsData->Flags &= ~FILE_FILE_NAME_INDEX_PRESENT;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
VOID
|
||
|
NTFS_FRS_STRUCTURE::SetIndexPresent(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine sets the index present bit on this file record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
_FrsData->Flags |= FILE_FILE_NAME_INDEX_PRESENT;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
ULONG
|
||
|
NTFS_FRS_STRUCTURE::QuerySize(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine computes the number of bytes in this file
|
||
|
record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The number of bytes in this file record segment.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _size;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
VCN
|
||
|
NTFS_FRS_STRUCTURE::QueryFileNumber(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This method returns the File Number of the File Record Segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
the File Number (i.e. ordinal number within the MFT) of this
|
||
|
File Record Segment.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _file_number;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
ULONG
|
||
|
NTFS_FRS_STRUCTURE::QueryClusterFactor(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This method returns the cluster factor.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The cluster factor with which this File Record Segment was initialized.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _cluster_factor;
|
||
|
}
|
||
|
|
||
|
INLINE
|
||
|
PLOG_IO_DP_DRIVE
|
||
|
NTFS_FRS_STRUCTURE::GetDrive(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This method returns the drive on which the File Record Segment
|
||
|
resides. This functionality enables clients to initialize
|
||
|
other File Record Segments on the same drive.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The drive on which the File Record Segment resides.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _drive;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
USHORT
|
||
|
NTFS_FRS_STRUCTURE::QueryReferenceCount(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine returns the value of the reference count field
|
||
|
in this frs.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The value of the reference count field in this frs.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _FrsData->ReferenceCount;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
VOID
|
||
|
NTFS_FRS_STRUCTURE::SetReferenceCount(
|
||
|
IN USHORT ReferenceCount
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine sets the value of the reference count field
|
||
|
in this frs.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
ReferenceCount - Supplies the new reference count.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
_FrsData->ReferenceCount = ReferenceCount;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
BIG_INT
|
||
|
NTFS_FRS_STRUCTURE::QueryVolumeSectors(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine returns the number of sectors on the volume as recorded in
|
||
|
the boot sector.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The number of volume sectors.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _volume_sectors;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
PNTFS_UPCASE_TABLE
|
||
|
NTFS_FRS_STRUCTURE::GetUpcaseTable(
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This method fetches the upcase table for the volume on which
|
||
|
this FRS resides.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The volume upcase table.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return _upcase_table;
|
||
|
}
|
||
|
|
||
|
INLINE
|
||
|
VOID
|
||
|
NTFS_FRS_STRUCTURE::SetUpcaseTable(
|
||
|
IN PNTFS_UPCASE_TABLE UpcaseTable
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This method sets the upcase table for the volume on which
|
||
|
this FRS resides.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
UpcaseTable -- Supplies the volume upcase table.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
_upcase_table = UpcaseTable;
|
||
|
}
|
||
|
|
||
|
|
||
|
INLINE
|
||
|
LSN
|
||
|
NTFS_FRS_STRUCTURE::QueryLsn(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This routine returns the logical sequence number for this file
|
||
|
record segment.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
The logical sequence number for this file record segment.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DebugAssert( _FrsData );
|
||
|
|
||
|
return _FrsData->Lsn;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif // _NTFS_FRS_STRUCTURE_DEFN_
|