Leaked source code of windows server 2003
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.
|
|
/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
indxroot.hxx
Abstract:
this module contains the declarations for the NTFS_INDEX_ROOT class, which models the root of an NTFS index
Author:
Bill McJohn (billmc) 06-Sept-1991
Environment:
ULIB, User Mode
--*/
#if !defined( _NTFS_INDEX_ROOT_DEFN_ )
#define _NTFS_INDEX_ROOT_DEFN_
DECLARE_CLASS( NTFS_ATTRIBUTE ); DECLARE_CLASS( NTFS_UPCASE_TABLE );
// If the index buffer size is smaller than the cluster size, we'll
// divide the index buffers into 512-byte blocks, and the ClustersPer-
// IndexBuffer item will actually be blocks per index buffer.
//
const ULONG NTFS_INDEX_BLOCK_SIZE = 512;
class NTFS_INDEX_ROOT : public OBJECT {
public:
DECLARE_CONSTRUCTOR( NTFS_INDEX_ROOT );
VIRTUAL ~NTFS_INDEX_ROOT( );
NONVIRTUAL BOOLEAN Initialize( IN PNTFS_ATTRIBUTE RootAttribute, IN PNTFS_UPCASE_TABLE UpcaseTable, IN ULONG MaximumSize );
NONVIRTUAL BOOLEAN Initialize( IN ATTRIBUTE_TYPE_CODE IndexedAttributeType, IN COLLATION_RULE CollationRule, IN PNTFS_UPCASE_TABLE UpcaseTable, IN ULONG ClustersPerBuffer, IN ULONG BytesPerBuffer, IN ULONG MaximumRootSize );
NONVIRTUAL BOOLEAN FindEntry( IN PCINDEX_ENTRY SearchEntry, IN OUT PULONG Ordinal, OUT PINDEX_ENTRY* EntryFound );
NONVIRTUAL BOOLEAN InsertEntry( IN PCINDEX_ENTRY NewEntry, IN PINDEX_ENTRY InsertPoint DEFAULT NULL );
NONVIRTUAL VOID RemoveEntry( PINDEX_ENTRY EntryToRemove );
NONVIRTUAL PINDEX_ENTRY GetFirstEntry( );
NONVIRTUAL VOID Recreate( IN BOOLEAN IsLeaf, IN VCN EndEntryDownpointer );
NONVIRTUAL BOOLEAN Write( PNTFS_ATTRIBUTE RootAttribute );
NONVIRTUAL ULONG QueryClustersPerBuffer( );
NONVIRTUAL ULONG QueryBufferSize( );
NONVIRTUAL ULONG QueryIndexedAttributeType( );
NONVIRTUAL COLLATION_RULE QueryCollationRule( );
NONVIRTUAL BOOLEAN IsLeaf( );
NONVIRTUAL BOOLEAN IsModified( );
private:
NONVIRTUAL VOID Construct( );
NONVIRTUAL VOID Destroy( );
NONVIRTUAL VOID MarkModified( );
ULONG _MaximumSize; ULONG _DataLength; PINDEX_ROOT _Data; PNTFS_UPCASE_TABLE _UpcaseTable;
BOOLEAN _IsModified;
};
INLINE PINDEX_ENTRY NTFS_INDEX_ROOT::GetFirstEntry( ) /*++
Routine Description:
This method returns a pointer to the first entry in the index root.
Arguments:
None.
Return Value:
A pointer to the first index entry in the root.
--*/ { return( (PINDEX_ENTRY)( (PBYTE)&(_Data->IndexHeader) + _Data->IndexHeader.FirstIndexEntry ) ); }
INLINE ULONG NTFS_INDEX_ROOT::QueryClustersPerBuffer( ) /*++
Routine Description:
This method returns the number of clusters in each Index Allocation Buffer in this index.
Arguments:
None.
Return Value:
Clusters per Buffer.
--*/ { return _Data->ClustersPerIndexBuffer; }
INLINE ULONG NTFS_INDEX_ROOT::QueryBufferSize( ) /*++
Routine Description:
This method returns the number of bytes in each Index Allocation Buffer in this index.
Arguments:
None.
Return Value:
Bytes per Buffer.
--*/ { return _Data->BytesPerIndexBuffer; }
INLINE ULONG NTFS_INDEX_ROOT::QueryIndexedAttributeType( ) /*++
Routine Description:
This method returns the Attribute Type Code of the attribute which is indexed by this index.
Arguments:
None.
Return Value:
The attribute type code of the attributes in this index.
--*/ { return _Data->IndexedAttributeType; }
INLINE COLLATION_RULE NTFS_INDEX_ROOT::QueryCollationRule( ) /*++
Routine Description:
This method marks the index root as modified.
Arguments:
None.
Return Value:
None.
--*/ { return _Data->CollationRule; }
INLINE BOOLEAN NTFS_INDEX_ROOT::IsLeaf( ) /*++
Routine Description:
This method determines whether the Index Root is a leaf (ie. that the entries in the root do not have downpointers) or a node (ie. the entries have downpointers).
Arguments:
None.
Return Value:
TRUE if the root is a leaf; FALSE if it is a node.
--*/ { return( !(_Data->IndexHeader.Flags & INDEX_NODE) ); }
INLINE BOOLEAN NTFS_INDEX_ROOT::IsModified( ) /*++
Routine Description:
This method indicates whether the index root has been modified since the last time it was read from or written to an $INDEX_ROOT attribute.
Arguments:
None.
Return Value:
TRUE if the index root has been modified; FALSE otherwise.
--*/ { return _IsModified; }
INLINE VOID NTFS_INDEX_ROOT::MarkModified( ) /*++
Routine Description:
This method marks the index root as modified.
Arguments:
None.
Return Value:
None.
--*/ { _IsModified = TRUE; }
#endif
|