mirror of
https://github.com/reactos/reactos.git
synced 2025-07-29 07:52:18 +00:00
[NTFS] - Add some helper functions for new features. Add some fixes. Add support for creating an index allocation, splitting a b-tree node, or "demoting" the index root. This allows for file creation without functional limitations.
+AddBitmap() - adds a $BITMAP attribute to a file record. +AddIndexAllocation() - adds an $INDEX_ALLOCATION attribute to a file record. +CountBTreeKeys() - Counts the number of linked B-Tree keys. CreateIndexBufferFromBTreeNode() - Set INDEX_NODE_LARGE if the node has sub-nodes. CreateIndexRootFromBTree() - Simplify the usage and math of MaxIndexSize; make it only account for the cumulative size of the index entries. +DemoteBTreeRoot() - Replaces the contents of an index root with a dummy key, and puts those contents in a new node, which is made a child of the dummy key. This is done when an index root grows too large. +GetIndexEntryVCN() - Retrieves the VCN from an index entry. NtfsAddFilenameToDirectory() - Fix math for MaxIndexRootSize. NtfsInsertKey() - Add support for splitting a B-Tree node. Don't check size of index root (that will be handled later). +SplitBTreeNode() - Called when a B-Tree node grows too large. UpdateIndexAllocation() - Create an $I30 index allocation attribute and bitmap attribute if needed. UpdateIndexNode() - Update children before updating the current node. Store VCN of child nodes in the index entries of their respective keys. svn path=/branches/GSoC_2016/NTFS/; revision=75707
This commit is contained in:
parent
5e7c11842a
commit
52c30fdf37
4 changed files with 895 additions and 134 deletions
|
@ -564,6 +564,13 @@ NtfsMarkIrpContextForQueue(PNTFS_IRP_CONTEXT IrpContext)
|
|||
//VOID
|
||||
//NtfsDumpAttribute(PATTRIBUTE Attribute);
|
||||
|
||||
NTSTATUS
|
||||
AddBitmap(PNTFS_VCB Vcb,
|
||||
PFILE_RECORD_HEADER FileRecord,
|
||||
PNTFS_ATTR_RECORD AttributeAddress,
|
||||
PCWSTR Name,
|
||||
USHORT NameLength);
|
||||
|
||||
NTSTATUS
|
||||
AddData(PFILE_RECORD_HEADER FileRecord,
|
||||
PNTFS_ATTR_RECORD AttributeAddress);
|
||||
|
@ -576,6 +583,13 @@ AddRun(PNTFS_VCB Vcb,
|
|||
ULONGLONG NextAssignedCluster,
|
||||
ULONG RunLength);
|
||||
|
||||
NTSTATUS
|
||||
AddIndexAllocation(PNTFS_VCB Vcb,
|
||||
PFILE_RECORD_HEADER FileRecord,
|
||||
PNTFS_ATTR_RECORD AttributeAddress,
|
||||
PCWSTR Name,
|
||||
USHORT NameLength);
|
||||
|
||||
NTSTATUS
|
||||
AddIndexRoot(PNTFS_VCB Vcb,
|
||||
PFILE_RECORD_HEADER FileRecord,
|
||||
|
@ -723,6 +737,9 @@ CreateIndexRootFromBTree(PDEVICE_EXTENSION DeviceExt,
|
|||
PINDEX_ROOT_ATTRIBUTE *IndexRoot,
|
||||
ULONG *Length);
|
||||
|
||||
NTSTATUS
|
||||
DemoteBTreeRoot(PB_TREE Tree);
|
||||
|
||||
VOID
|
||||
DestroyBTree(PB_TREE Tree);
|
||||
|
||||
|
@ -752,13 +769,26 @@ GetAllocationOffsetFromVCN(PDEVICE_EXTENSION DeviceExt,
|
|||
ULONG IndexBufferSize,
|
||||
ULONGLONG Vcn);
|
||||
|
||||
ULONG
|
||||
GetSizeOfIndexEntries(PB_TREE_FILENAME_NODE Node);
|
||||
|
||||
NTSTATUS
|
||||
NtfsInsertKey(PB_TREE Tree,
|
||||
ULONGLONG FileReference,
|
||||
PFILENAME_ATTRIBUTE FileNameAttribute,
|
||||
PB_TREE_FILENAME_NODE Node,
|
||||
BOOLEAN CaseSensitive,
|
||||
ULONG MaxIndexRootSize);
|
||||
ULONG MaxIndexRootSize,
|
||||
ULONG IndexRecordSize,
|
||||
PB_TREE_KEY *MedianKey,
|
||||
PB_TREE_FILENAME_NODE *NewRightHandSibling);
|
||||
|
||||
NTSTATUS
|
||||
SplitBTreeNode(PB_TREE Tree,
|
||||
PB_TREE_FILENAME_NODE Node,
|
||||
PB_TREE_KEY *MedianKey,
|
||||
PB_TREE_FILENAME_NODE *NewRightHandSibling,
|
||||
BOOLEAN CaseSensitive);
|
||||
|
||||
NTSTATUS
|
||||
UpdateIndexAllocation(PDEVICE_EXTENSION DeviceExt,
|
||||
|
@ -772,8 +802,7 @@ UpdateIndexNode(PDEVICE_EXTENSION DeviceExt,
|
|||
PB_TREE_FILENAME_NODE Node,
|
||||
ULONG IndexBufferSize,
|
||||
PNTFS_ATTR_CONTEXT IndexAllocationContext,
|
||||
ULONG IndexAllocationOffset,
|
||||
PNTFS_ATTR_CONTEXT BitmapContext);
|
||||
ULONG IndexAllocationOffset);
|
||||
|
||||
/* close.c */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue