Difference between revisions of "Unit NTFSClass"
Line 31: | Line 31: | ||
---- | ---- | ||
− | '' | + | |
+ | '''NTFS disk table''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskTable = class(TDiskTable)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Respresents the $Mft and $MftMirr | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FStartSector:Int64;</code> | ||
+ | | Absolute starting sector of this table | ||
+ | |- | ||
+ | | <code>FStartCluster:Int64;</code> | ||
+ | | Absolute starting cluster of this table | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FEntry:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property StartSector:Int64 read FStartSector write FStartSector;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property StartCluster:Int64 read FStartCluster write FStartCluster;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Entry:TNTFSDiskEntry read FEntry write FEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk block''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskBlock = class(TDiskBlock)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Represents a block of $Bitmap entries | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FBlockCount:LongWord;</code> | ||
+ | | Number of cluster entries in this block (Bits in the bitmap) | ||
+ | |- | ||
+ | | <code>FBlockBuffer:Pointer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FBlockCluster:Int64;</code> | ||
+ | | First cluster represented by this block (BlockNo represents the VCN of the block) | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property BlockCount:LongWord read FBlockCount write FBlockCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property BlockBuffer:Pointer read FBlockBuffer write FBlockBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property BlockCluster:Int64 read FBlockCluster write FBlockCluster;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk entry''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskEntry = class(TDiskEntry)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Represents a file entry. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AOrigin:TNTFSDiskRecord; AAttribute:TNTFSDiskAttribute);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FPrevEntry:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FNextEntry:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FUsed:Int64;</code> | ||
+ | | Used size of the file | ||
+ | |- | ||
+ | | <code>FAllocated:Int64;</code> | ||
+ | | Allocated size of file | ||
+ | |- | ||
+ | | <code>FChangeTime:TFileTime;</code> | ||
+ | | MFT record change time | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FOrigin:TNTFSDiskRecord;</code> | ||
+ | | Entry origin record | ||
+ | |- | ||
+ | | <code>FAttribute:TNTFSDiskAttribute;</code> | ||
+ | | Entry naming attribute | ||
+ | |- | ||
+ | | <code>FAlternate:TNTFSDiskAttribute;</code> | ||
+ | | Alternate name attribute | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetOrigin(AOrigin:TNTFSDiskRecord);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property LocalLock:TMutexHandle read FLocalLock write FLocalLock;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property PrevEntry:TNTFSDiskEntry read FPrevEntry write FPrevEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property NextEntry:TNTFSDiskEntry read FNextEntry write FNextEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Used:Int64 read FUsed write FUsed;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Allocated:Int64 read FAllocated write FAllocated;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ChangeTime:TFileTime read FChangeTime write FChangeTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Origin:TNTFSDiskRecord read FOrigin write SetOrigin;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Attribute:TNTFSDiskAttribute read FAttribute write FAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Alternate:TNTFSDiskAttribute read FAlternate write FAlternate;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetDot:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetDotDot:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateDot:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CreateDotDot:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateDot:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateDotDot(AEntry:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecordNumber:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function FileReference:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateEntry:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateRecord:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function FindFirstName(AHandle:TFindHandle; AReference:Boolean):TDiskEntry; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function FindPrevName(AHandle:TFindHandle; AReference:Boolean):TDiskEntry; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function FindNextName(AHandle:TFindHandle; AReference:Boolean):TDiskEntry; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function FindLastName(AHandle:TFindHandle; AReference:Boolean):TDiskEntry; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk access contol list''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskAcl = class(TDiskAcl)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of attribute $SECURITY_DESCRIPTOR | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk access control entry''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskAce = class(TDiskAce)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of attribute $SECURITY_DESCRIPTOR | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS entry list''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSEntryList = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FEntryCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FFirstEntry:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FLastEntry:TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Link(AEntry:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Unlink(AEntry:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property EntryCount:Integer read FEntryCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FirstEntry:TNTFSDiskEntry read FFirstEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property LastEntry:TNTFSDiskEntry read FLastEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Add(AEntry:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Remove(AEntry:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure ClearList; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS record list''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSRecordList = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FRecordCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FFirstRecord:TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FLastRecord:TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Link(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Unlink(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property RecordCount:Integer read FRecordCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FirstRecord:TNTFSDiskRecord read FFirstRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property LastRecord:TNTFSDiskRecord read FLastRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Add(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Remove(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure ClearList; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS record index''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSRecordIndex = class(TLinkedObjBtree)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Index of FILE records. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FRecordLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRunsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FItemsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FNodesLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FIndexLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FExtendedsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FAttributesLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRunLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FItemLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FKeyLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FNodeLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FExtendedLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FAttributeLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Find(const ARecordNumber:Int64; ACurrent:TNTFSDiskRecord):TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function CreateBlank:TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Compare(AEntry1,AEntry2:TBtreeObject):Integer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function CreateRecord(ABase:TNTFSDiskRecord; const ARecordNumber:Int64; AVersion:Word):TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyRecord(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewRecord(ABase:TNTFSDiskRecord; const ARecordNumber:Int64; AVersion:Word):TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function InsertRecord(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DeleteRecord(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveRecord(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function FindRecord(const ARecordNumber:Int64):TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReaderConvert:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriterConvert:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RunsReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RunsReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RunsWriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RunsWriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ItemsReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ItemsReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ItemsWriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ItemsWriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function NodesReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NodesReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NodesWriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NodesWriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function IndexReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function IndexReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function IndexWriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function IndexWriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ExtendedsReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ExtendedsReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ExtendedsWriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ExtendedsWriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AttributesReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AttributesReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AttributesWriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AttributesWriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk record''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskRecord = class(TBtreeObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Represents a FILE record entry. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; ABase:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRunsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FItemsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FNodesLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FIndexLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FExtendedsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FAttributesLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRunLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FItemLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FKeyLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FNodeLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FExtendedLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FAttributeLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FStatus:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FPrevRecord:TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FNextRecord:TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRecordFlags:Word;</code> | ||
+ | | Flags (See Consts) | ||
+ | |- | ||
+ | | <code>FHardLinkCount:Word;</code> | ||
+ | | Hard link count | ||
+ | |- | ||
+ | | <code>FSequenceNumber:Word;</code> | ||
+ | | Sequence number | ||
+ | |- | ||
+ | | <code>FNextAttributeId:Word;</code> | ||
+ | | Next Attribute Id | ||
+ | |- | ||
+ | | <code>FRecordNumber:Int64;</code> | ||
+ | | Number of this MFT Record | ||
+ | |- | ||
+ | | <code>FRecordSize:LongWord;</code> | ||
+ | | Actual size of the FILE record | ||
+ | |- | ||
+ | | <code>FRecordAllocated:LongWord;</code> | ||
+ | | Allocated size of the FILE record | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttributeOffset:Word;</code> | ||
+ | | Offset to the first Attribute | ||
+ | |- | ||
+ | | <code>FUpdateSequenceOffset:Word;</code> | ||
+ | | Offset to the Update Sequence Record | ||
+ | |- | ||
+ | | <code>FUpdateSequenceLength:Word;</code> | ||
+ | | Size in words of the Update Sequence Record | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FUpdateSequenceNumber:Word;</code> | ||
+ | | Update Sequence Number | ||
+ | |- | ||
+ | | <code>FLogFileSequenceNumber:Int64;</code> | ||
+ | | LogFile Sequence Number (LSN) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FBase:TNTFSDiskRecord;</code> | ||
+ | | Base file record | ||
+ | |- | ||
+ | | <code>FLinks:TNTFSEntryList;</code> | ||
+ | | List of record links | ||
+ | |- | ||
+ | | <code>FStreams:TNTFSEntryList;</code> | ||
+ | | List of record streams | ||
+ | |- | ||
+ | | <code>FRecords:TNTFSRecordList;</code> | ||
+ | | List of child records | ||
+ | |- | ||
+ | | <code>FAttributes:TNTFSDiskAttributes;</code> | ||
+ | | List of record attributes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetResizing:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetResizing(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRemoving:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetRemoving(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetMirrored:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetMirrored(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetMetafile:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetMetafile(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetReserved:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetReserved(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetExpansion:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetExpansion(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetOverflow:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetOverflow(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetExtension:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetExtension(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetIsUsed:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsUsed(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsFolder:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsFolder(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsUnknown1:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsUnknown1(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsIndexView:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsIndexView(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetOrigin:TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateLinks(ANew:Boolean):TNTFSEntryList;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CreateStreams(ANew:Boolean):TNTFSEntryList;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CreateRecords(ANew:Boolean):TNTFSRecordList;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CreateAttributes(AVersion:Word; ANew:Boolean):TNTFSDiskAttributes;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Resizing:Boolean read GetResizing write SetResizing;</code> | ||
+ | | Record is being Resized | ||
+ | |- | ||
+ | | <code>property Removing:Boolean read GetRemoving write SetRemoving;</code> | ||
+ | | Record is being Removed | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Mirrored:Boolean read GetMirrored write SetMirrored;</code> | ||
+ | | Record is in $MftMirr file | ||
+ | |- | ||
+ | | <code>property Metafile:Boolean read GetMetafile write SetMetafile;</code> | ||
+ | | Record is an NTFS metafile | ||
+ | |- | ||
+ | | <code>property Reserved:Boolean read GetReserved write SetReserved;</code> | ||
+ | | Record is an Mft reserved record | ||
+ | |- | ||
+ | | <code>property Expansion:Boolean read GetExpansion write SetExpansion;</code> | ||
+ | | Record is an Mft expansion record | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Overflow:Boolean read GetOverflow write SetOverflow;</code> | ||
+ | | Record has an attribute list attribute | ||
+ | |- | ||
+ | | <code>property Extension:Boolean read GetExtension write SetExtension;</code> | ||
+ | | Record is an extension of the base record | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property PrevRecord:TNTFSDiskRecord read FPrevRecord write FPrevRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property NextRecord:TNTFSDiskRecord read FNextRecord write FNextRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property IsUsed:Boolean read GetIsUsed write SetIsUsed;</code> | ||
+ | | Record is in use | ||
+ | |- | ||
+ | | <code>property IsFolder:Boolean read GetIsFolder write SetIsFolder;</code> | ||
+ | | Record is a folder | ||
+ | |- | ||
+ | | <code>property IsUnknown1:Boolean read GetIsUnknown1 write SetIsUnknown1;</code> | ||
+ | |- | ||
+ | | <code>property IsIndexView:Boolean read GetIsIndexView write SetIsIndexView;</code> | ||
+ | | Record is an index view | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property RecordFlags:Word read FRecordFlags write FRecordFlags;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property HardLinkCount:Word read FHardLinkCount write FHardLinkCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SequenceNumber:Word read FSequenceNumber write FSequenceNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property NextAttributeId:Word read FNextAttributeId write FNextAttributeId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RecordNumber:Int64 read FRecordNumber write FRecordNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RecordSize:LongWord read FRecordSize write FRecordSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RecordAllocated:LongWord read FRecordAllocated write FRecordAllocated;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property AttributeOffset:Word read FAttributeOffset write FAttributeOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UpdateSequenceOffset:Word read FUpdateSequenceOffset write FUpdateSequenceOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UpdateSequenceLength:Word read FUpdateSequenceLength write FUpdateSequenceLength;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property UpdateSequenceNumber:Word read FUpdateSequenceNumber write FUpdateSequenceNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property LogFileSequenceNumber:Int64 read FLogFileSequenceNumber write FLogFileSequenceNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Base:TNTFSDiskRecord read FBase write FBase;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Links:TNTFSEntryList read FLinks;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Streams:TNTFSEntryList read FStreams;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Records:TNTFSRecordList read FRecords;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Attributes:TNTFSDiskAttributes read FAttributes;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Origin:TNTFSDiskRecord read GetOrigin;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateLink(AAttribute,AAlternate:TNTFSDiskAttribute; ANew:Boolean):TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyLink(ALink:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewLink(AAttribute,AAlternate:TNTFSDiskAttribute):TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetLink(AAttribute:TNTFSDiskAttribute):TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DeleteLink(ALink:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RenameLink(ALink:TNTFSDiskEntry; AAttribute,AAlternate:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateStream(AAttribute:TNTFSDiskAttribute; ANew:Boolean):TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyStream(AStream:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewStream(AAttribute:TNTFSDiskAttribute):TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetStream(AAttribute:TNTFSDiskAttribute):TNTFSDiskEntry;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DeleteStream(AStream:TNTFSDiskEntry):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetFileNameByKey(AKey:TNTFSAttributeKey):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetFileNameByName(const AName:String; AInstance:Integer):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetFileNameByParent(const AName:String; const AParent:Int64; AInstance:Integer):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetFileNameByNameSpace(const AName:String; const AParent:Int64; ANameSpace:Byte; AInstance:Integer):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetRecord(AInstance:Integer):TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRecordByFree(AFree:LongWord; AExclude:Boolean):TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRecordByReference(const AFileReference:Int64):TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AddRecord(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveRecord(ARecord:TNTFSDiskRecord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetAttributeByItem(AItem:TNTFSDiskItem):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttributeByStatus(AInclude,AExclude:Word; AInstance:Integer):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttributeByVCN(AAttribute:TNTFSDiskAttribute; const AVCN:Int64; var AInstance:LongWord):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttributeByUnit(AAttribute:TNTFSDiskAttribute; const AUnit:Int64; var AInstance:LongWord):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateAttribute(AType:LongWord; AVersion:Word; ANew:Boolean):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyAttribute(AAttribute:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewAttribute(APrevious:TNTFSDiskAttribute; AType:LongWord; const AName:String; AVersion:Word):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttribute(AType:LongWord; const AName:String; AInstance:Integer):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveAttribute(AAttribute:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function MoveAttribute(ADest:TNTFSDiskRecord; AAttribute:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RenameAttribute(AAttribute:TNTFSDiskAttribute; const AName:String):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function FileReference:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function BaseReference:Int64;</code> | ||
+ | | File reference to the base FILE record | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function LinkCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function StreamCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RecordCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AttributeCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecordFree:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AttributeSize(AVersion:Word; AType:LongWord):LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedOffset(AVersion:Word):Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedSequenceOffset(AVersion:Word):Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedSequenceLength(ASectorSize:Word):Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedStreamUsed(AVersion:Word; AAttribute:TNTFSDiskAttribute):Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadAttributes(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteAttributes(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadRecord(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word; AFree:Boolean):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteRecord(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk index''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskIndex = class(TLinkedObjBtree)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Index of INDX records. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(AKeyLocal:TMutexHandle; ALock:TSynchronizerHandle; AVolumeVersion,ASectorSize:Word; AIndexType,ACollateRule:LongWord; AAttribute:TNTFSDiskAttribute);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FKeyLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FStatus:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FSectorSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FVolumeVersion:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FIndexType:LongWord;</code> | ||
+ | | Attribute Type (Or None if Data Index) | ||
+ | |- | ||
+ | | <code>FCollateRule:LongWord;</code> | ||
+ | | Collation Rule | ||
+ | |- | ||
+ | | <code>FIndexRecordSize:LongWord;</code> | ||
+ | | Size of Index Allocation Entry (bytes) | ||
+ | |- | ||
+ | | <code>FIndexCounterOffset:LongWord;</code> | ||
+ | | Index Record Number increment | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FClustersPerIndex:LongWord;</code> | ||
+ | | Clusters per INDX Record or 0 if less than cluster size | ||
+ | |- | ||
+ | | <code>FIndexsPerCluster:LongWord;</code> | ||
+ | | INDX Records per Cluster or 0 if more than cluster size | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FIndexCounterShift:Word;</code> | ||
+ | | Shift count for Record -> Counter | ||
+ | |- | ||
+ | | <code>FIndexRecordShiftCount:Word;</code> | ||
+ | | Shift count for Record -> VCN | ||
+ | |- | ||
+ | | <code>FIndexRecordOffsetMask:Int64;</code> | ||
+ | | Mask for Record offset calculation | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FTotalIndexRecordCount:Int64;</code> | ||
+ | | Total number of index records in index | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FLastFreeIndexRecord:Int64;</code> | ||
+ | | Or ntfsUnknownRecordNumber if not known | ||
+ | |- | ||
+ | | <code>FFreeIndexRecordCount:Int64;</code> | ||
+ | | Or ntfsUnknownRecordNumber if not known | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FCompareSecurityDescriptor:TNTFSCompareSecurityDescriptor;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FUpCase:TNTFSUpCase;</code> | ||
+ | | Uppercase Conversion Table | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FNodes:TNTFSDiskNodes;</code> | ||
+ | | List of index nodes | ||
+ | |- | ||
+ | | <code>FAttribute:TNTFSDiskAttribute;</code> | ||
+ | | Attribute owning this index | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetNodesLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetKeyLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetNodeLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetLoaded:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetLoaded(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetChanged:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetUpCase:PNTFSUpCaseData;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRootNode:TNTFSDiskNode;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateNodes(ANew:Boolean):TNTFSDiskNodes;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CompareKey(AEntry1,AEntry2:Pointer; ASize1,ASize2:Word):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CompareBinary(AEntry1,AEntry2:Pointer; ASize1,ASize2:Word):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CompareFileName(AEntry1,AEntry2:PWideChar; ASize1,ASize2:Word):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CompareUnicode(AEntry1,AEntry2:PWideChar; ASize1,ASize2:Word):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CompareLongWord(AEntry1,AEntry2:LongWord; ASize1,ASize2:Word):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CompareSID(AEntry1,AEntry2:PSID; ASize1,ASize2:Word):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CompareSecurityHash(AEntry1,AEntry2:PNTFSSecurityHashKeyData; ASize1,ASize2:Word):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CompareGUID(AEntry1,AEntry2:PGUID; ASize1,ASize2:Word):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function GetEnd(AEntry:TBtreeObject):TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetStart(AEntry:TBtreeObject):TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetBlank(AEntry:TBtreeObject):TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetMedian(AEntry:TBtreeObject):TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetDropTest(AEntry:TBtreeObject; var ALeft:Boolean):TBtreeObject;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetDrop(AEntry:TBtreeObject; var ALeft:Boolean):TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetMerge(AEntry:TBtreeObject):TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetBorrow(AEntry:TBtreeObject):TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetTarget(ADrop:TBtreeObject; ALeft:Boolean):TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function PushNode(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SplitNode(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DropNode(AEntry,ADrop,ATarget:TBtreeObject; ALeft:Boolean):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DropNodeOld(AEntry,ADrop:TBtreeObject; ALeft:Boolean):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function MergeNode(AEntry,AMerge:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function BorrowEntry(AEntry,ABorrow:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SwapEntry(AEntry,ASwap:TBtreeObject;ALeft:Boolean):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SetParentEntry(AEntry,AParent:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function DeleteBlank(ABlank:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AttachBlank(ABlank:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DetachBlank(ABlank:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AttachEntry(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DetachEntry(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RequirePush(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RequireSplit(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RequireDrop(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RequireMerge(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RequireBorrow(AEntry:TBtreeObject):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Loaded:Boolean read GetLoaded write SetLoaded;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Changed:Boolean read GetChanged;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property SectorSize:Word read FSectorSize write FSectorSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property VolumeVersion:Word read FVolumeVersion;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property IndexType:LongWord read FIndexType write FIndexType;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property CollateRule:LongWord read FCollateRule write FCollateRule;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexRecordSize:LongWord read FIndexRecordSize write FIndexRecordSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexCounterOffset:LongWord read FIndexCounterOffset write FIndexCounterOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property ClustersPerIndex:LongWord read FClustersPerIndex write FClustersPerIndex;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexsPerCluster:LongWord read FIndexsPerCluster write FIndexsPerCluster;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property IndexCounterShift:Word read FIndexCounterShift write FIndexCounterShift;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexRecordShiftCount:Word read FIndexRecordShiftCount write FIndexRecordShiftCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexRecordOffsetMask:Int64 read FIndexRecordOffsetMask write FIndexRecordOffsetMask;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property TotalIndexRecordCount:Int64 read FTotalIndexRecordCount write FTotalIndexRecordCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property LastFreeIndexRecord:Int64 read FLastFreeIndexRecord write FLastFreeIndexRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FreeIndexRecordCount:Int64 read FFreeIndexRecordCount write FFreeIndexRecordCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property CompareSecurityDescriptor:TNTFSCompareSecurityDescriptor read FCompareSecurityDescriptor write FCompareSecurityDescriptor;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property UpCase:TNTFSUpCase read FUpCase write FUpCase;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Nodes:TNTFSDiskNodes read FNodes;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Attribute:TNTFSDiskAttribute read FAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property RootNode:TNTFSDiskNode read GetRootNode;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function NodeCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateKey(ANode:TNTFSDiskNode; ABlank:Boolean):TNTFSDiskKey; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyKey(AKey:TNTFSDiskKey):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewKey(AKey,AData:Pointer; AKeySize,ADataSize:Word):TNTFSDiskKey; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewKeyEx(AKey,AData,APadding:Pointer; AKeySize,ADataSize,APaddingSize:Word):TNTFSDiskKey; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AddKey(AParent,AKey:TNTFSDiskKey):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function InsertKey(AKey:TNTFSDiskKey):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveKey(AKey:TNTFSDiskKey):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateNode(ANew:Boolean):TNTFSDiskNode;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyNode(ANode:TNTFSDiskNode):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewNode(const ARecordNumber:Int64):TNTFSDiskNode;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetNode(const ARecordNumber:Int64):TNTFSDiskNode;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DeleteNode(ANode:TNTFSDiskNode):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveNode(ANode:TNTFSDiskNode):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateNodes(AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function FindKey(AValue:Pointer; ASize:Word):TNTFSDiskKey; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadRoot(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteRoot(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadKeys(AParent:TNTFSDiskKey; ANode:TNTFSDiskNode; ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteKeys(AParent:TNTFSDiskKey; ANode:TNTFSDiskNode; ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS data index''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDataIndex = class(TNTFSDiskIndex)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>function CompareSecurityDescriptor(AHash1,AHash2,ASecurityId:LongWord; ADescriptor:Pointer; ASize:Word):Integer;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Find(AValue:Pointer; ASize:Word; ACurrent:TNTFSDataKey):TNTFSDataKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function FindEx(AValue:Pointer; ASize:Word; AHash:LongWord; ACurrent:TNTFSDataKey):TNTFSDataKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function CreateBlank:TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Compare(AEntry1,AEntry2:TBtreeObject):Integer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function CreateKey(ANode:TNTFSDiskNode; ABlank:Boolean):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewKey(AKey,AData:Pointer; AKeySize,ADataSize:Word):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetKeyBySID(ASID:PSID):TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetKeyByOwner(AOwner:LongWord):TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetKeyByObjectId(const AObjectId:TGUID):TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetKeyBySecurity(ASecurity:TNTFSSecurity):TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetKeyByReparse(AReparseTag:LongWord; const AFileReference:Int64):TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function FindKey(AValue:Pointer;ASize:Word):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS padded index''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSPaddedIndex = class(TNTFSDataIndex)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: A DataIndex that allows a block of Padding to be specified. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function CreateBlank:TBtreeObject; override;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>function CreateBlank:TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function CreateKey(ANode:TNTFSDiskNode; ABlank:Boolean):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewKey(AKey,AData:Pointer; AKeySize,ADataSize:Word):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewKeyEx(AKey,AData,APadding:Pointer; AKeySize,ADataSize,APaddingSize:Word):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS attribute index''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSAttributeIndex = class(TNTFSDiskIndex)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>function Find(AValue:Pointer; ASize:Word; ACurrent:TNTFSAttributeKey):TNTFSAttributeKey;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function CreateBlank:TBtreeObject; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Compare(AEntry1,AEntry2:TBtreeObject):Integer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function CreateKey(ANode:TNTFSDiskNode; ABlank:Boolean):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewKey(AKey,AData:Pointer; AKeySize,ADataSize:Word):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetKeyByFileName(const AFileName:String):TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function NewKeyByAttribute(AAttribute:TNTFSDiskAttribute):TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetKeyByAttribute(AAttribute:TNTFSDiskAttribute):TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function FindKey(AValue:Pointer; ASize:Word):TNTFSDiskKey; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk nodes''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskNodes = class(TFileSysListEx)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ANodeLocal:TMutexHandle; ALock:TSynchronizerHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FNodeLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetModified:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetModified(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Modified:Boolean read GetModified write SetModified;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function TotalSize:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function NodeCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk node''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskNode = class(TListObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Represents an INDX record header. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AIndex:TNTFSDiskIndex);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FStatus:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FIndexFlags:Word;</code> | ||
+ | | Flags (See Consts) | ||
+ | |- | ||
+ | | <code>FIndexSize:LongWord;</code> | ||
+ | | Total size of the Index Entries | ||
+ | |- | ||
+ | | <code>FIndexAllocated:LongWord;</code> | ||
+ | | Allocated size of the Index Entries | ||
+ | |- | ||
+ | | <code>FEntryOffset:LongWord;</code> | ||
+ | | Offset to first Index Entry | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRecordNumber:Int64;</code> | ||
+ | | Number of this INDX record in the Index Allocation | ||
+ | |- | ||
+ | | <code>FUpdateSequenceOffset:Word;</code> | ||
+ | | Offset to the Update Sequence Record | ||
+ | |- | ||
+ | | <code>FUpdateSequenceLength:Word;</code> | ||
+ | | Size in words of the Update Sequence Record | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FUpdateSequenceNumber:Word;</code> | ||
+ | | Update Sequence Number | ||
+ | |- | ||
+ | | <code>FLogFileSequenceNumber:Int64;</code> | ||
+ | | LogFile sequence number | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FIndex:TNTFSDiskIndex;</code> | ||
+ | | Index owning this node | ||
+ | |- | ||
+ | | <code>FBlank:TNTFSDiskKey;</code> | ||
+ | | Blank key of this node (Blank keys do not move) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetAdded:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetAdded(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetDeleted:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetDeleted(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetChanged:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetChanged(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetModified:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetModified(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetIsRoot:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetHasSubNodes:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetHasSubNodes(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetStart:TNTFSDiskKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Added:Boolean read GetAdded write SetAdded;</code> | ||
+ | | Index record to be allocated | ||
+ | |- | ||
+ | | <code>property Deleted:Boolean read GetDeleted write SetDeleted;</code> | ||
+ | | Index record to be deallocated | ||
+ | |- | ||
+ | | <code>property Changed:Boolean read GetChanged write SetChanged;</code> | ||
+ | | Index record to be updated | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Modified:Boolean read GetModified write SetModified;</code> | ||
+ | | Index record has been added, deleted or changed | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property IsRoot:Boolean read GetIsRoot;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property HasSubNodes:Boolean read GetHasSubNodes write SetHasSubNodes;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property IndexFlags:Word read FIndexFlags write FIndexFlags;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexSize:LongWord read FIndexSize write FIndexSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexAllocated:LongWord read FIndexAllocated write FIndexAllocated;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property EntryOffset:LongWord read FEntryOffset write FEntryOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property RecordNumber:Int64 read FRecordNumber write FRecordNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UpdateSequenceOffset:Word read FUpdateSequenceOffset write FUpdateSequenceOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UpdateSequenceLength:Word read FUpdateSequenceLength write FUpdateSequenceLength;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property UpdateSequenceNumber:Word read FUpdateSequenceNumber write FUpdateSequenceNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property LogFileSequenceNumber:Int64 read FLogFileSequenceNumber write FLogFileSequenceNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Index:TNTFSDiskIndex read FIndex;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Blank:TNTFSDiskKey read FBlank write FBlank;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Start:TNTFSDiskKey read GetStart;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function KeyCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function IndexFree:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateKeys(AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedOffset(AVersion:Word):LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedAllocated(AVersion:Word):LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedSequenceOffset(AVersion:Word):Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedSequenceLength(ASectorSize:Word):Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function WriteEmpty(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word; var AUpdateSequenceOffset,AUpdateSequenceLength:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadRecord(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteRecord(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadHeader(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteHeader(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk key''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskKey = class(TBtreeObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Represents an INDX record entry. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FStatus:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FKey:Pointer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FEntryFlags:Word;</code> | ||
+ | | Flags (See Consts) | ||
+ | |- | ||
+ | | <code>FEntrySize:Word;</code> | ||
+ | | Length of the index entry | ||
+ | |- | ||
+ | | <code>FKeySize:Word;</code> | ||
+ | | Length of the key entry | ||
+ | |- | ||
+ | | <code>FSubNodeNumber:Int64;</code> | ||
+ | | Number of the sub-node in the index allocation attribute | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FNode:TNTFSDiskNode;</code> | ||
+ | | Index node of this key | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetChanged:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetChanged(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetHasSubNode:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetHasSubNode(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsLastNode:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsLastNode(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetKeySize(ASize:Word); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetSubNodeNumber(const ANodeNumber:Int64);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetNode(ANode:TNTFSDiskNode);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Changed:Boolean read GetChanged write SetChanged;</code> | ||
+ | | Index record to be updated | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property HasSubNode:Boolean read GetHasSubNode write SetHasSubNode;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsLastNode:Boolean read GetIsLastNode write SetIsLastNode;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Key:Pointer read FKey;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property EntryFlags:Word read FEntryFlags write FEntryFlags;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property EntrySize:Word read FEntrySize write FEntrySize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property KeySize:Word read FKeySize write SetKeySize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SubNodeNumber:Int64 read FSubNodeNumber write SetSubNodeNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Node:TNTFSDiskNode read FNode write SetNode;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):Word; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS data key''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDataKey = class(TNTFSDiskKey)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FData:Pointer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FDataSize:Word;</code> | ||
+ | | Size of the data (Only valid when the last entry flag is not set) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetKeySize(ASize:Word); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetData(AData:Pointer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(ASize:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Data:Pointer read FData write SetData;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property DataSize:Word read FDataSize write SetDataSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function DataOffset:Word;</code> | ||
+ | | Offset to the data (Only valid when the last entry flag is not set) | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):Word; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS padded key''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSPaddedKey = class(TNTFSDataKey)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FPadding:Pointer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FPaddingSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetPadding(APadding:Pointer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetPaddingSize(ASize:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Padding:Pointer read FPadding write SetPadding;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property PaddingSize:Word read FPaddingSize write SetPaddingSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS attribute key''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSAttributeKey = class(TNTFSDiskKey)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FFileReference:Int64;</code> | ||
+ | | File reference (Only valid when the last entry flag is not set) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttribute:TNTFSDiskAttribute;</code> | ||
+ | | Indexed attribute of this key | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetInvalid:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetInvalid(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetKeySize(ASize:Word); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetAttribute(AAttribute:TNTFSDiskAttribute);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Invalid:Boolean read GetInvalid write SetInvalid;</code> | ||
+ | | Key points to invalid file record or attribute | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property FileReference:Int64 read FFileReference write FFileReference;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Attribute:TNTFSDiskAttribute read FAttribute write SetAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateKey:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecordNumber:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):Word; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk runs''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskRuns = class(TFileSysListEx)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ARunLocal:TMutexHandle; ALock:TSynchronizerHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FRunLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRecent:TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FRecentVCN:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetStart:TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetFinal:TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Recent:TNTFSDiskRun read FRecent write FRecent;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RecentVCN:Int64 read FRecentVCN write FRecentVCN;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SparseCount:Int64;</code> | ||
+ | | Count of sparse runs in list | ||
+ | |- | ||
+ | | <code>function ClusterCount:Int64;</code> | ||
+ | | Count of normal runs in list | ||
+ | |- | ||
+ | | <code>function AllocatedCount:Int64;</code> | ||
+ | | Count of allocated runs in list | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function TotalSize:LongWord;</code> | ||
+ | | Total size of the encoded data runs | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RunCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk run''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskRun = class(TListObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AAttribute:TNTFSDiskAttribute);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FStart:Int64;</code> | ||
+ | | Run start logical cluster | ||
+ | |- | ||
+ | | <code>FOffset:Int64;</code> | ||
+ | | Run start cluster offset | ||
+ | |- | ||
+ | | <code>FLength:Int64;</code> | ||
+ | | Run length in clusters | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttribute:TNTFSDiskAttribute;</code> | ||
+ | | Attribute owning this run | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetIsLast:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsSparse:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetOffsetSize:Byte;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetLengthSize:Byte;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetStart(const AStart:Int64);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetOffset(const AOffset:Int64);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetSuccessor:TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetPredecessor:TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property IsLast:Boolean read GetIsLast;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsSparse:Boolean read GetIsSparse;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Start:Int64 read FStart write SetStart;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Offset:Int64 read FOffset write SetOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Length:Int64 read FLength write FLength;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Attribute:TNTFSDiskAttribute read FAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RunSize:LongWord; </code> | ||
+ | | Size of the encoded data run | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateRun:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadRun(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteRun(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk items''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskItems = class(TFileSysListEx)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(AItemLocal:TMutexHandle; ALock:TSynchronizerHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FItemLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FStatus:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetLoaded:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetLoaded(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetPrevious(AItem:TNTFSDiskItem):TNTFSDiskItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Loaded:Boolean read GetLoaded write SetLoaded;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function TotalSize:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ItemCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk item''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskItem = class(TListObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of attribute $ATTRIBUTE_LIST | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskAttribute);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FStatus:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FItemSize:Word;</code> | ||
+ | | Record length | ||
+ | |- | ||
+ | | <code>FStartVCN:Int64;</code> | ||
+ | | Starting VCN if non resident | ||
+ | |- | ||
+ | | <code>FFileReference:Int64;</code> | ||
+ | | File Reference of the attribute | ||
+ | |- | ||
+ | | <code>FAttributeType:LongWord;</code> | ||
+ | | Attribute Type | ||
+ | |- | ||
+ | | <code>FAttributeId:Word;</code> | ||
+ | | Attribute Id | ||
+ | |- | ||
+ | | <code>FAttributeName:String;</code> | ||
+ | | Name in Unicode (if NameLength > 0) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FParent:TNTFSDiskAttribute;</code> | ||
+ | | Attribute list owning this item | ||
+ | |- | ||
+ | | <code>FAttribute:TNTFSDiskAttribute;</code> | ||
+ | | Attribute pointed to by this item | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttributeHash:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetInvalid:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetInvalid(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetAttributeName:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetAttributeName(const AAttributeName:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetAttribute(AAttribute:TNTFSDiskAttribute);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Compare(AItem:TNTFSDiskItem):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Invalid:Boolean read GetInvalid write SetInvalid;</code> | ||
+ | | Item points to invalid file record or attribute | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property ItemSize:Word read FItemSize write FItemSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property StartVCN:Int64 read FStartVCN write FStartVCN;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FileReference:Int64 read FFileReference write FFileReference;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttributeType:LongWord read FAttributeType write FAttributeType;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttributeId:Word read FAttributeId write FAttributeId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttributeName:String read GetAttributeName write SetAttributeName;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Parent:TNTFSDiskAttribute read FParent;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Attribute:TNTFSDiskAttribute read FAttribute write SetAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property AttributeHash:LongWord read FAttributeHash;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecordNumber:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AttributeNameSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AttributeNameLength:Byte;</code> | ||
+ | | Name length | ||
+ | |- | ||
+ | | <code>function AttributeNameOffset:Byte;</code> | ||
+ | | Offset to Name | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateItem:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadItem(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteItem(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk attributes''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskAttributes = class(TFileSysListEx)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(AAttributeLocal:TMutexHandle; ALock:TSynchronizerHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FAttributeLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetPrevious(AAttribute:TNTFSDiskAttribute):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function TotalSize:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AttributeCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS disk attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDiskAttribute = class(TListObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>FStatus:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FData:Pointer;</code> | ||
+ | | Only applicable if attribute is resident | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttributeType:LongWord;</code> | ||
+ | | Attribute Type (e.g. 0x80, 0xA0) | ||
+ | |- | ||
+ | | <code>FAttributeSize:LongWord;</code> | ||
+ | | Length of the Attribute (including header) | ||
+ | |- | ||
+ | | <code>FAttributeFlags:Word;</code> | ||
+ | | Attribute Flags | ||
+ | |- | ||
+ | | <code>FAttributeId:Word;</code> | ||
+ | | Attribute Id | ||
+ | |- | ||
+ | | <code>FAttributeName:String;</code> | ||
+ | | Attribute Name | ||
+ | |- | ||
+ | | <code>FNonResident:Byte;</code> | ||
+ | | Non-resident flag | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FIndexed:Byte;</code> | ||
+ | | Indexed flag | ||
+ | |- | ||
+ | | <code>FDataSize:LongWord;</code> | ||
+ | | Length of the Attribute Data | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FStartVCN:Int64;</code> | ||
+ | | Starting VCN | ||
+ | |- | ||
+ | | <code>FLastVCN:Int64;</code> | ||
+ | | Last VCN | ||
+ | |- | ||
+ | | <code>FStreamSize:Int64;</code> | ||
+ | | Real size of the attribute | ||
+ | |- | ||
+ | | <code>FStreamUsed:Int64;</code> | ||
+ | | The actual Allocated size of the attribute (Only present when compressed and only in the first instance) | ||
+ | |- | ||
+ | | <code>FStreamAllocated:Int64;</code> | ||
+ | | Allocated size of the attribute | ||
+ | |- | ||
+ | | <code>FInitializedSize:Int64;</code> | ||
+ | | Initialized data size of the stream (Portion which has been Written) | ||
+ | |- | ||
+ | | <code>FCompressionUnit:Word;</code> | ||
+ | | Compression Unit Size | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRuns:TNTFSDiskRuns;</code> | ||
+ | | List of runs of this attribute | ||
+ | |- | ||
+ | | <code>FItems:TNTFSDiskItems;</code> | ||
+ | | List of items of this attribute | ||
+ | |- | ||
+ | | <code>FIndex:TNTFSDiskIndex;</code> | ||
+ | | Index of this attribute if applicable | ||
+ | |- | ||
+ | | <code>FParent:TNTFSDiskRecord;</code> | ||
+ | | Record owning this attribute | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttributeHash:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetRunsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetItemsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIndexLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetExtendedsLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetRunLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetItemLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetKeyLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetExtendedLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetUpdating:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetUpdating(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetIsFixed:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsSingle:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsUnlisted:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsUnmovable:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsManaged:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetIsSparse:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsSparse(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsEncrypted:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsEncrypted(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsCompressed:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsCompressed(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetAttributeName:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetAttributeName(const AAttributeName:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetDataSize:LongWord; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Compare(AAttribute:TNTFSDiskAttribute):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateRuns(ANew:Boolean):TNTFSDiskRuns;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CreateItems(ANew:Boolean):TNTFSDiskItems;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetRecord(AInstance:Integer):TNTFSDiskRecord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttribute(AType:LongWord; const AName:String; AInstance:Integer):TNTFSDiskAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Updating:Boolean read GetUpdating write SetUpdating;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property IsFixed:Boolean read GetIsFixed;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsSingle:Boolean read GetIsSingle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsUnlisted:Boolean read GetIsUnlisted;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsUnmovable:Boolean read GetIsUnmovable;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsManaged:Boolean read GetIsManaged;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property IsSparse:Boolean read GetIsSparse write SetIsSparse;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsEncrypted:Boolean read GetIsEncrypted write SetIsEncrypted;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsCompressed:Boolean read GetIsCompressed write SetIsCompressed;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Data:Pointer read FData;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property AttributeType:LongWord read FAttributeType;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttributeSize:LongWord read FAttributeSize write FAttributeSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttributeFlags:Word read FAttributeFlags write FAttributeFlags;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttributeId:Word read FAttributeId write FAttributeId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttributeName:String read GetAttributeName write SetAttributeName;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property NonResident:Byte read FNonResident write FNonResident;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Indexed:Byte read FIndexed write FIndexed;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property DataSize:LongWord read GetDataSize write SetDataSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property StartVCN:Int64 read FStartVCN write FStartVCN;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property LastVCN:Int64 read FLastVCN write FLastVCN;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property StreamSize:Int64 read FStreamSize write FStreamSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property StreamUsed:Int64 read FStreamUsed write FStreamUsed;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property StreamAllocated:Int64 read FStreamAllocated write FStreamAllocated;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property InitializedSize:Int64 read FInitializedSize write FInitializedSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property CompressionUnit:Word read FCompressionUnit write FCompressionUnit;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Runs:TNTFSDiskRuns read FRuns;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Items:TNTFSDiskItems read FItems;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Index:TNTFSDiskIndex read FIndex;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Parent:TNTFSDiskRecord read FParent write FParent;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property AttributeHash:LongWord read FAttributeHash;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetRunCount(const AVCN:Int64; var AStartVCN,ACount:Int64):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRunLength(const AVCN:Int64; var AStartVCN,ALength:Int64):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRunByUnit(const AUnit:Int64; var AStartVCN:Int64):TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRunByCluster(const ACluster:Int64; var AStartVCN:Int64):TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateRun(ANew:Boolean):TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyRun(ARun:TNTFSDiskRun):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewRun(const AStart,ALength:Int64):TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function InsertRun(APrev:TNTFSDiskRun; const AStart,ALength:Int64):TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRun(const AVCN:Int64; var AStartVCN:Int64):TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetRunOld(const AVCN:Int64; var AStartVCN:Int64):TNTFSDiskRun;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function MergeRun(ARun:TNTFSDiskRun):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SplitRun(ARun:TNTFSDiskRun; const ALength:Int64):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveRun(ARun:TNTFSDiskRun):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function MoveRun(ADest:TNTFSDiskAttribute; ARun:TNTFSDiskRun):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetItemByAttribute(AAttribute:TNTFSDiskAttribute):TNTFSDiskItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateItem(ANew:Boolean):TNTFSDiskItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyItem(AItem:TNTFSDiskItem):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewItem(AAttribute:TNTFSDiskAttribute):TNTFSDiskItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetItem(AType:LongWord; const AName:String; AInstance:Integer):TNTFSDiskItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveItem(AItem:TNTFSDiskItem):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function MoveItem(AItem:TNTFSDiskItem; AAttribute:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RenameItem(AItem:TNTFSDiskItem; AAttribute:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateIndex(AVersion,ASector:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewIndex(AVersion,ASector:Word; AType,ARule,ASize,AOffset:LongWord):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecordNumber:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function FileReference:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function BaseReference:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RunOffset:Word;</code> | ||
+ | | Offset to the Data Run | ||
+ | |- | ||
+ | | <code>function DataOffset:Word;</code> | ||
+ | | Offset to the Attribute Data | ||
+ | |- | ||
+ | | <code>function AttributeNameSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AttributeNameLength:Byte;</code> | ||
+ | | Name length | ||
+ | |- | ||
+ | | <code>function AttributeNameOffset:Word;</code> | ||
+ | | Offset to the Name | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RunCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ItemCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):LongWord; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedDataSize(AVersion:Word):LongWord; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedStreamUsed(AVersion:Word):Int64; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CoalesceRun(ARun:TNTFSDiskRun):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateRun(ARun:TNTFSDiskRun):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateKey(AKey:TNTFSDiskKey):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateItem(AItem:TNTFSDiskItem):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateEntry(AEntry:TNTFSDiskEntry):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateAttribute(AEntry:TNTFSDiskEntry):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadRuns(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteRuns(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadItems(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteItems(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadAttribute(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteAttribute(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS standard information attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSStandardInformationAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FCreateTime:TFileTime;</code> | ||
+ | | File Creation | ||
+ | |- | ||
+ | | <code>FWriteTime:TFileTime;</code> | ||
+ | | File Altered | ||
+ | |- | ||
+ | | <code>FChangeTime:TFileTime;</code> | ||
+ | | MFT Changed | ||
+ | |- | ||
+ | | <code>FAccessTime:TFileTime;</code> | ||
+ | | File Read | ||
+ | |- | ||
+ | | <code>FAttributes:LongWord;</code> | ||
+ | | DOS File Permissions | ||
+ | |- | ||
+ | | <code>FMaxVersions:LongWord;</code> | ||
+ | | Maximum Number of Versions | ||
+ | |- | ||
+ | | <code>FVersionNo:LongWord;</code> | ||
+ | | Version Number | ||
+ | |- | ||
+ | | <code>FClassId:LongWord;</code> | ||
+ | | Class Id | ||
+ | |- | ||
+ | | <code>FOwnerId:LongWord;</code> | ||
+ | | Owner Id | ||
+ | |- | ||
+ | | <code>FSecurityId:LongWord;</code> | ||
+ | | Security Id | ||
+ | |- | ||
+ | | <code>FQuotaCharge:Int64;</code> | ||
+ | | Quota Charged | ||
+ | |- | ||
+ | | <code>FUpdateSequenceNumber:Int64;</code> | ||
+ | | Update Sequence Number | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property CreateTime:TFileTime read FCreateTime write FCreateTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property WriteTime:TFileTime read FWriteTime write FWriteTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ChangeTime:TFileTime read FChangeTime write FChangeTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AccessTime:TFileTime read FAccessTime write FAccessTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Attributes:LongWord read FAttributes write FAttributes;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property MaxVersions:LongWord read FMaxVersions write FMaxVersions;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property VersionNo:LongWord read FVersionNo write FVersionNo;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ClassId:LongWord read FClassId write FClassId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property OwnerId:LongWord read FOwnerId write FOwnerId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SecurityId:LongWord read FSecurityId write FSecurityId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property QuotaCharge:Int64 read FQuotaCharge write FQuotaCharge;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UpdateSequenceNumber:Int64 read FUpdateSequenceNumber write FUpdateSequenceNumber;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateEntry(AEntry:TNTFSDiskEntry):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateAttribute(AEntry:TNTFSDiskEntry):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS attribute list''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSAttributeListAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS file name attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSFileNameAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FParentReference:Int64;</code> | ||
+ | | File reference to the parent directory | ||
+ | |- | ||
+ | | <code>FCreateTime:TFileTime;</code> | ||
+ | | C Time - File Creation | ||
+ | Note: These fields are only updated when the filename is changed (See Standard Information instead) | ||
+ | |- | ||
+ | | <code>FWriteTime:TFileTime;</code> | ||
+ | | A Time - File Altered | ||
+ | Note: These fields are only updated when the filename is changed (See Standard Information instead) | ||
+ | |- | ||
+ | | <code>FChangeTime:TFileTime;</code> | ||
+ | | M Time - MFT Changed | ||
+ | Note: These fields are only updated when the filename is changed (See Standard Information instead) | ||
+ | |- | ||
+ | | <code>FAccessTime:TFileTime;</code> | ||
+ | | R Time - File Read | ||
+ | Note: These fields are only updated when the filename is changed (See Standard Information instead) | ||
+ | |- | ||
+ | | <code>FFileAllocated:Int64;</code> | ||
+ | | Allocated size of the file (As for CreateTime/WriteTime/ChangeTime etc) | ||
+ | |- | ||
+ | | <code>FFileSize:Int64;</code> | ||
+ | | Real size of the file (As for CreateTime/WriteTime/ChangeTime etc) | ||
+ | |- | ||
+ | | <code>FFileFlags:LongWord;</code> | ||
+ | | Flags, e.g. Directory, compressed, hidden (As for CreateTime/WriteTime/ChangeTime etc) | ||
+ | |- | ||
+ | | <code>FReparseTag:LongWord;</code> | ||
+ | | Used by EAs and Reparse | ||
+ | |- | ||
+ | | <code>FNameSpace:Byte;</code> | ||
+ | | Filename namespace | ||
+ | |- | ||
+ | | <code>FFileName:String;</code> | ||
+ | | File name | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FFileHash:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetFileName:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetFileName(const AFileName:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property ParentReference:Int64 read FParentReference write FParentReference;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property CreateTime:TFileTime read FCreateTime write FCreateTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property WriteTime:TFileTime read FWriteTime write FWriteTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ChangeTime:TFileTime read FChangeTime write FChangeTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AccessTime:TFileTime read FAccessTime write FAccessTime;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FileAllocated:Int64 read FFileAllocated write FFileAllocated;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FileSize:Int64 read FFileSize write FFileSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FileFlags:LongWord read FFileFlags write FFileFlags;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ReparseTag:LongWord read FReparseTag write FReparseTag;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property NameSpace:Byte read FNameSpace write FNameSpace;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FileName:String read GetFileName write SetFileName;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property FileHash:LongWord read FFileHash;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function FileNameSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function FileNameLength:Byte;</code> | ||
+ | | Filename length in characters | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ParentRecord:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function UpdateEntry(AEntry:TNTFSDiskEntry):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateAttribute(AEntry:TNTFSDiskEntry):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS object Id attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSObjectIdAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FObjectId:TGUID;</code> | ||
+ | | GUID Object Id Unique Id assigned to file | ||
+ | |- | ||
+ | | <code>FBirthVolumeId:TGUID;</code> | ||
+ | | GUID Birth Volume Id Volume where file was created | ||
+ | |- | ||
+ | | <code>FBirthObjectId:TGUID;</code> | ||
+ | | GUID Birth Object Id Original Object Id of file | ||
+ | |- | ||
+ | | <code>FDomainId:TGUID;</code> | ||
+ | | GUID Domain Id Domain in which object was created | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property ObjectId:TGUID read FObjectId write FObjectId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property BirthVolumeId:TGUID read FBirthVolumeId write FBirthVolumeId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property BirthObjectId:TGUID read FBirthObjectId write FBirthObjectId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property DomainId:TGUID read FDomainId write FDomainId;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS volume version attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSVolumeVersionAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS security descriptor attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSSecurityDescriptorAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: This is the same structure that is used for all security in Windows (File/Kernel/Registry etc). See TSecurityDescriptor and associated values in Security unit for more information. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FSecurity:TNTFSSecurity;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Security:TNTFSSecurity read FSecurity;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateSecurity:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewSecurity(ASecurity:TNTFSSecurity):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadSecurity(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteSecurity(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS volume name attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSVolumeNameAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FVolumeName:String;</code> | ||
+ | | Volume name | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetVolumeName:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetVolumeName(const AVolumeName:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property VolumeName:String read GetVolumeName write SetVolumeName;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS volume information attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSVolumeInformationAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FMajorVersion:Byte;</code> | ||
+ | | Major version number | ||
+ | |- | ||
+ | | <code>FMinorVersion:Byte;</code> | ||
+ | | Minor version number | ||
+ | |- | ||
+ | | <code>FVolumeFlags:Word;</code> | ||
+ | | Flags | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property MajorVersion:Byte read FMajorVersion write FMajorVersion;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property MinorVersion:Byte read FMinorVersion write FMinorVersion;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property VolumeFlags:Word read FVolumeFlags write FVolumeFlags;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS data attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSDataAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function UpdateEntry(AEntry:TNTFSDiskEntry):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateAttribute(AEntry:TNTFSDiskEntry):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS index root attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSIndexRootAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FIndexType:LongWord;</code> | ||
+ | | Attribute Type | ||
+ | |- | ||
+ | | <code>FCollateRule:LongWord;</code> | ||
+ | | Collation Rule | ||
+ | |- | ||
+ | | <code>FIndexRecordSize:LongWord;</code> | ||
+ | | Size of Index Allocation Entry (bytes) | ||
+ | |- | ||
+ | | <code>FIndexCounterOffset:LongWord;</code> | ||
+ | | Index Record Number increment | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property IndexType:LongWord read FIndexType write FIndexType;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property CollateRule:LongWord read FCollateRule write FCollateRule;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexRecordSize:LongWord read FIndexRecordSize write FIndexRecordSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IndexCounterOffset:LongWord read FIndexCounterOffset write FIndexCounterOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateIndex(AVersion,ASector:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewIndex(AVersion,ASector:Word; AType,ARule,ASize,AOffset:LongWord):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS index allocation attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSIndexAllocationAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS bitmap attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSBitmapAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FBitmap:Pointer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FBitmapSize:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetBitmapSize(AValue:LongWord);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Bitmap:Pointer read FBitmap;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property BitmapSize:LongWord read FBitmapSize write SetBitmapSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS reparse point attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSReparsePointAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FReparseTag:LongWord;</code> | ||
+ | | Reparse Type (and Flags) | ||
+ | |- | ||
+ | | <code>FReparseSize:Word;</code> | ||
+ | | Reparse Data Length | ||
+ | |- | ||
+ | | <code>FReparseGUID:TGUID;</code> | ||
+ | | Reparse GUID | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FReparse:TNTFSReparse;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetIsAlias:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsAlias(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsHighLatency:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsHighLatency(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsMicrosoft:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetIsMicrosoft(AValue:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property IsAlias:Boolean read GetIsAlias write SetIsAlias;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsHighLatency:Boolean read GetIsHighLatency write SetIsHighLatency;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsMicrosoft:Boolean read GetIsMicrosoft write SetIsMicrosoft;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property ReparseTag:LongWord read FReparseTag write FReparseTag;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ReparseSize:Word read FReparseSize write FReparseSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ReparseGUID:TGUID read FReparseGUID write FReparseGUID;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Reparse:TNTFSReparse read FReparse;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateReparse:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewReparse(AReparseTag:LongWord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS symbolic link attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSSymbolicLinkAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS extended attribute information''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSExtendedAttrInformationAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FPackedSize:Word;</code> | ||
+ | | Size of the packed Extended Attributes | ||
+ | |- | ||
+ | | <code>FFlagCount:Word;</code> | ||
+ | | Number of Extended Attributes with NEED_EA | ||
+ | |- | ||
+ | | <code>FUnpackedSize:LongWord;</code> | ||
+ | | Size of the unpacked Extended Attributes | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property PackedSize:Word read FPackedSize write FPackedSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property FlagCount:Word read FFlagCount write FFlagCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UnpackedSize:LongWord read FUnpackedSize write FUnpackedSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS extended attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSExtendedAttrAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FExtendeds:TNTFSExtendeds;</code> | ||
+ | | List of attributes of this attribute | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Extendeds:TNTFSExtendeds read FExtendeds;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateExtended:TNTFSExtended;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyExtended(AExtended:TNTFSExtended):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewExtended(const AName:String):TNTFSExtended;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetExtended(const AName:String):TNTFSExtended;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveExtended(AExtended:TNTFSExtended):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ExtendedCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadExtendeds(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteExtendeds(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS property set attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSPropertySetAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS logged utility stream attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSLoggedUtilityStreamAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS end attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSEndAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):LongWord; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedDataSize(AVersion:Word):LongWord; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CalculatedStreamSize(AVersion:Word):Int64; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadAttribute(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteAttribute(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS unknown attribute''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSUnknownAttribute = class(TNTFSDiskAttribute)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(AValue:LongWord); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS object Id''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSObjId = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of index $O in file $ObjId (Not Used) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS quota''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSQuota = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of index $Q in file $Quota (Not Used) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS owner''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSOwner = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of index $O in file $Quota (Not Used) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS upper case''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSUpCase = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of file $UpCase | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLock:TSynchronizerHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FData:Pointer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReaderLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReaderUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriterLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriterUnlock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Data:Pointer read FData;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Init(AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Convert(ASource,ADest:Pointer; ASize:LongWord):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadUpCase(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteUpCase(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS attribute definitions''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSAttrDefs = class(TFileSysList)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FAttrDefLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetPrevious(AAttrDef:TNTFSAttrDef):TNTFSAttrDef;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function CreateAttrDef(AType:LongWord; AVersion:Word; ANew:Boolean):TNTFSAttrDef;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroyAttrDef(AAttrDef:TNTFSAttrDef):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewAttrDef(AType:LongWord; const AName:String; AVersion:Word):TNTFSAttrDef;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttrDef(AType:LongWord; const AName:String):TNTFSAttrDef;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttrDefByIndex(AIndex:Integer; AVersion:Word):TNTFSAttrDef;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttrDefByIndexEx(AIndex:Integer; AVersion:Word; AWrite:Boolean):TNTFSAttrDef;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetAttrDefByAttribute(AAttribute:TNTFSDiskAttribute):TNTFSAttrDef;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveAttrDef(AAttrDef:TNTFSAttrDef):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CheckSize(AAttribute:TNTFSDiskAttribute;const ASize:Int64):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CheckIndexed(AAttribute:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CheckResident(AAttribute:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CheckUncompressed(AAttribute:TNTFSDiskAttribute):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function TotalSize:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AttrDefCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Init(AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadAttrDefs(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteAttrDefs(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS attribute definition''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSAttrDef = class(TListObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of file $AttrDef | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttributeName:String;</code> | ||
+ | | Label in Unicode | ||
+ | |- | ||
+ | | <code>FAttributeType:LongWord;</code> | ||
+ | | Type | ||
+ | |- | ||
+ | | <code>FDisplayRule:LongWord;</code> | ||
+ | | Display rule | ||
+ | |- | ||
+ | | <code>FCollateRule:LongWord;</code> | ||
+ | | Collation rule | ||
+ | |- | ||
+ | | <code>FAttrDefFlags:LongWord;</code> | ||
+ | | Flags (See Consts) | ||
+ | |- | ||
+ | | <code>FMinimumSize:Int64;</code> | ||
+ | | Minimum size | ||
+ | |- | ||
+ | | <code>FMaximumSize:Int64;</code> | ||
+ | | Maximum size | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttributeHash:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetAttributeName:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetAttributeName(const AAttributeName:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetIsIndexed:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsResident:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetIsUncompressed:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Compare(AAttrDef:TNTFSAttrDef):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property AttributeName:String read GetAttributeName write SetAttributeName;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttributeType:LongWord read FAttributeType write FAttributeType;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property DisplayRule:LongWord read FDisplayRule write FDisplayRule;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property CollateRule:LongWord read FCollateRule write FCollateRule;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property AttrDefFlags:LongWord read FAttrDefFlags write FAttrDefFlags;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property MinimumSize:Int64 read FMinimumSize write FMinimumSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property MaximumSize:Int64 read FMaximumSize write FMaximumSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property IsIndexed:Boolean read GetIsIndexed;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsResident:Boolean read GetIsResident;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property IsUncompressed:Boolean read GetIsUncompressed;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Init(AIndex:Integer;AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property AttributeHash:LongWord read FAttributeHash;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadAttrDef(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteAttrDef(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS reparse''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSReparse = class(TDiskReparse)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of attribute $REPARSE_POINT | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AAttribute:TNTFSDiskAttribute);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FData:Pointer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FDataSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FAttribute:TNTFSDiskAttribute;</code> | ||
+ | | Attribute owning this index | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetData(AData:Pointer); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetDataSize:Word; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(ASize:Word); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Data:Pointer read FData write SetData;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property DataSize:Word read GetDataSize write SetDataSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Attribute:TNTFSDiskAttribute read FAttribute;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):Word; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS reparse symbolic link''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSReparseSymLink = class(TNTFSReparse)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of attribute $REPARSE_POINT (Tag 0xA000000C) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AAttribute:TNTFSDiskAttribute);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetData(AData:Pointer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetDataSize(ASize:Word); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>FPrintName:String;</code> | ||
+ | | Path Buffer | ||
+ | |- | ||
+ | | <code>FSubstituteName:String;</code> | ||
+ | | Path Buffer | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FPrintHash:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FSubstituteHash:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetTarget:String; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetPrintName:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetPrintName(const APrintName:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetSubstituteName:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetSubstituteName(const ASubstituteName:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property PrintName:String read GetPrintName write SetPrintName;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SubstituteName:String read GetSubstituteName write SetSubstituteName;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property PrintHash:LongWord read FPrintHash;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SubstituteHash:LongWord read FSubstituteHash;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function PrintNameSize:Word; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function PrintNameOffset:Word; virtual;</code> | ||
+ | | Print Name Offset | ||
+ | |- | ||
+ | | <code>function PrintNameLength:Word; virtual;</code> | ||
+ | | Print Name Length | ||
+ | |- | ||
+ | | <code>function SubstituteNameSize:Word; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SubstituteNameOffset:Word; virtual;</code> | ||
+ | | Substitute Name Offset | ||
+ | |- | ||
+ | | <code>function SubstituteNameLength:Word; virtual;</code> | ||
+ | | Substitute Name Length | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):Word; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS reparse mount point''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSReparseMountPoint = class(TNTFSReparseSymLink)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of attribute $REPARSE_POINT (Tag 0xA0000003) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle; AAttribute:TNTFSDiskAttribute);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function PrintNameSize:Word; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function PrintNameOffset:Word; override;</code> | ||
+ | | Print Name Offset | ||
+ | |- | ||
+ | | <code>function PrintNameLength:Word; override;</code> | ||
+ | | Print Name Length | ||
+ | |- | ||
+ | | <code>function SubstituteNameSize:Word; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SubstituteNameOffset:Word; override;</code> | ||
+ | | Substitute Name Offset | ||
+ | |- | ||
+ | | <code>function SubstituteNameLength:Word; override;</code> | ||
+ | | Substitute Name Length | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CalculatedSize(AVersion:Word):Word; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS extendeds''' | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSExtendeds = class(TFileSysListEx)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create(AExtendedLocal:TMutexHandle; ALock:TSynchronizerHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FExtendedLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function TotalSize:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ExtendedCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS extended''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSExtended = class(TListObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of attribute $EA | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FExtendedOffset:LongWord;</code> | ||
+ | | Offset to next Extended Attribute (Offset to next EA is the size of this EA) | ||
+ | |- | ||
+ | | <code>FExtendedFlags:Byte;</code> | ||
+ | | Flags | ||
+ | |- | ||
+ | | <code>FExtendedName:String;</code> | ||
+ | | Name Note: No offset so always in the same location (Not Unicode) | ||
+ | |- | ||
+ | | <code>FExtendedData:Pointer;</code> | ||
+ | | Value | ||
+ | |- | ||
+ | | <code>FExtendedDataSize:Word;</code> | ||
+ | | Value Length | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FExtendedHash:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetExtendedName:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetExtendedName(const AExtendedName:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetExtendedDataSize(ASize:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property ExtendedOffset:LongWord read FExtendedOffset write FExtendedOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ExtendedFlags:Byte read FExtendedFlags write FExtendedFlags;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ExtendedName:String read GetExtendedName write SetExtendedName;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ExtendedData:Pointer read FExtendedData;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ExtendedDataSize:Word read FExtendedDataSize write SetExtendedDataSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property ExtendedHash:LongWord read FExtendedHash;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ExtendedSize:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ExtendedNameSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ExtendedNameLength:Byte;</code> | ||
+ | | Name Length | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadExtended(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteExtended(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS security items''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSSecurityItems = class(TFileSysList)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FSecurityLocal:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetPrevious(ASecurityItem:TNTFSSecurityItem):TNTFSSecurityItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>function CreateSecurityItem(ANew:Boolean):TNTFSSecurityItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DestroySecurityItem(ASecurityItem:TNTFSSecurityItem):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewSecurityItem(ASecurityId:LongWord; const ASecurityOffset:Int64; ASecurity:TNTFSSecurity):TNTFSSecurityItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetSecurityItem(ASecurityId:LongWord):TNTFSSecurityItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetSecurityItemEx(ASecurityId:LongWord; AWrite:Boolean):TNTFSSecurityItem;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateSecurityItem(ASecurityItem:TNTFSSecurityItem; ASecurityId:LongWord; ASecurity:TNTFSSecurity):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DeleteSecurityItem(ASecurityItem:TNTFSSecurityItem):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveSecurityItem(ASecurityItem:TNTFSSecurityItem; AFree:Boolean):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function TotalSize:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SecurityItemCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Init(AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadSecurityItems(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteSecurityItems(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS security item''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSSecurityItem = class(TListObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of stream $SDS in file $Secure | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLocalLock:TMutexHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FSecurityHash:LongWord;</code> | ||
+ | | Hash of Security Descriptor | ||
+ | |- | ||
+ | | <code>FSecurityId:LongWord;</code> | ||
+ | | Security Id | ||
+ | |- | ||
+ | | <code>FSecurityOffset:Int64;</code> | ||
+ | | Offset of this entry in $SDS | ||
+ | |- | ||
+ | | <code>FSecuritySize:LongWord;</code> | ||
+ | | Size of this entry in $SDS | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FSecurity:TNTFSSecurity;</code> | ||
+ | | Self-relative Security Descriptor | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Compare(ASecurityItem:TNTFSSecurityItem):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CompareOld(ASecurityItem:TNTFSSecurityItem):Integer; virtual; </code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property SecurityHash:LongWord read FSecurityHash write FSecurityHash;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SecurityId:LongWord read FSecurityId write FSecurityId;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SecurityOffset:Int64 read FSecurityOffset write FSecurityOffset;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SecuritySize:LongWord read FSecuritySize write FSecuritySize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Security:TNTFSSecurity read FSecurity;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CreateSecurity:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function NewSecurity(ASecurity:TNTFSSecurity):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function UpdateSecurity(ASecurity:TNTFSSecurity):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DeleteSecurity:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function RemoveSecurity(AFree:Boolean):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function MirrorOffset:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Init(ASecurityId:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadSecurityItem(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteSecurityItem(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS security''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSSecurity = class(TDiskSecurity)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of attribute $SECURITY_DESCRIPTOR and stream $SDS in file $Secure | ||
+ | |- | ||
+ | |colspan="2"|Note: This is the same structure that is used for all security in Windows (File/Kernel/Registry etc). See TSecurityDescriptor and associated values in Security unit for more information. | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>constructor CreateFromSecurity(ALocalLock:TMutexHandle; ASecurity:TDiskSecurity); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>constructor CreateFromDescriptor(ALocalLock:TMutexHandle; ADescriptor:Pointer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FVolumeVersion:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRevision:Byte;</code> | ||
+ | | Revision | ||
+ | |- | ||
+ | | <code>FControl:Word;</code> | ||
+ | | Control Flags | ||
+ | |- | ||
+ | | <code>FSacl:PACL;</code> | ||
+ | | SACL | ||
+ | |- | ||
+ | | <code>FDacl:PACL;</code> | ||
+ | | DACL | ||
+ | |- | ||
+ | | <code>FOwner:PSID;</code> | ||
+ | | Owner SID | ||
+ | |- | ||
+ | | <code>FGroup:PSID;</code> | ||
+ | | Group SID | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetSacl(ASacl:PACL);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetDacl(ADacl:PACL);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetOwner(AOwner:PSID);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetGroup(AGroup:PSID);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetSaclSize(ASize:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetDaclSize(ASize:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetOwnerSize(ASize:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetGroupSize(ASize:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property VolumeVersion:Word read FVolumeVersion;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Revision:Byte read FRevision write FRevision;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Control:Word read FControl write FControl;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Sacl:PACL read FSacl write SetSacl;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Dacl:PACL read FDacl write SetDacl;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Owner:PSID read FOwner write SetOwner;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Group:PSID read FGroup write SetGroup;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SaclSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function DaclSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function OwnerSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GroupSize:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SaclOffset:LongWord;</code> | ||
+ | | Offset to SACL | ||
+ | |- | ||
+ | | <code>function DaclOffset:LongWord;</code> | ||
+ | | Offset to DACL | ||
+ | |- | ||
+ | | <code>function OwnerOffset:LongWord;</code> | ||
+ | | Offset to Owner SID | ||
+ | |- | ||
+ | | <code>function GroupOffset:LongWord;</code> | ||
+ | | Offset to Group SID | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SaclOffsetEx(ALocal:Boolean):LongWord;</code> | ||
+ | | Offset to SACL | ||
+ | |- | ||
+ | | <code>function DaclOffsetEx(ALocal:Boolean):LongWord;</code> | ||
+ | | Offset to DACL | ||
+ | |- | ||
+ | | <code>function OwnerOffsetEx(ALocal:Boolean):LongWord;</code> | ||
+ | | Offset to Owner SID | ||
+ | |- | ||
+ | | <code>function GroupOffsetEx(ALocal:Boolean):LongWord;</code> | ||
+ | | Offset to Group SID | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SecuritySize:LongWord; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SecurityHash:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SecurityDescriptor:Pointer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SecurityDescriptorEx(ALocal:Boolean):Pointer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function InheritedDescriptor:Pointer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function MergedDescriptor(AChild:Pointer):Pointer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseDescriptor(ADescriptor:Pointer; AInherited,AMerged:Boolean):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CopyToSecurity(ASecurity:TDiskSecurity):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function CopyToDescriptor(ADescriptor:Pointer; ASize:LongWord):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CopyToDescriptorEx(ADescriptor:Pointer; ASize:LongWord; ALocal:Boolean):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CopyFromDescriptor(ADescriptor:Pointer; ASize:LongWord):Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadSecurity(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteSecurity(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteSecurityEx(ABuffer:Pointer; var AOffset,ASize:LongWord; ALocal:Boolean; AVersion:Word):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS security Id''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSSecurityId = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of index $SII in file $Secure (Not Used) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''NTFS security hash''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TNTFSSecurityHash = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Data of index $SDH in file $Secure (Not Used) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
=== Public variables === | === Public variables === |
Revision as of 03:44, 17 March 2017
Return to Unit Reference
Contents
Description
Ultibo NTFS classes unit
To be documented
Constants
None defined
Type definitions
NTFS compare security descriptor
TNTFSCompareSecurityDescriptor = function(ASecurityId:LongWord; ADescriptor:Pointer; ASize:Word):Boolean of Object;
|
Class definitions
NTFS disk table
TNTFSDiskTable = class(TDiskTable)
Note: Respresents the $Mft and $MftMirr | |
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FStartSector:Int64;
|
Absolute starting sector of this table |
FStartCluster:Int64;
|
Absolute starting cluster of this table |
FEntry:TNTFSDiskEntry;
|
|
public
| |
property StartSector:Int64 read FStartSector write FStartSector;
|
|
property StartCluster:Int64 read FStartCluster write FStartCluster;
|
|
property Entry:TNTFSDiskEntry read FEntry write FEntry;
|
NTFS disk block
TNTFSDiskBlock = class(TDiskBlock)
Note: Represents a block of $Bitmap entries | |
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FBlockCount:LongWord;
|
Number of cluster entries in this block (Bits in the bitmap) |
FBlockBuffer:Pointer;
|
|
FBlockCluster:Int64;
|
First cluster represented by this block (BlockNo represents the VCN of the block) |
public
| |
property BlockCount:LongWord read FBlockCount write FBlockCount;
|
|
property BlockBuffer:Pointer read FBlockBuffer write FBlockBuffer;
|
|
property BlockCluster:Int64 read FBlockCluster write FBlockCluster;
|
NTFS disk entry
TNTFSDiskEntry = class(TDiskEntry)
Note: Represents a file entry. | |
constructor Create(ALocalLock:TMutexHandle; AOrigin:TNTFSDiskRecord; AAttribute:TNTFSDiskAttribute);
|
|
destructor Destroy; override;
|
|
private
| |
FPrevEntry:TNTFSDiskEntry;
|
|
FNextEntry:TNTFSDiskEntry;
|
|
FUsed:Int64;
|
Used size of the file |
FAllocated:Int64;
|
Allocated size of file |
FChangeTime:TFileTime;
|
MFT record change time |
FOrigin:TNTFSDiskRecord;
|
Entry origin record |
FAttribute:TNTFSDiskAttribute;
|
Entry naming attribute |
FAlternate:TNTFSDiskAttribute;
|
Alternate name attribute |
procedure SetOrigin(AOrigin:TNTFSDiskRecord);
|
|
public
| |
property LocalLock:TMutexHandle read FLocalLock write FLocalLock;
|
|
property PrevEntry:TNTFSDiskEntry read FPrevEntry write FPrevEntry;
|
|
property NextEntry:TNTFSDiskEntry read FNextEntry write FNextEntry;
|
|
property Used:Int64 read FUsed write FUsed;
|
|
property Allocated:Int64 read FAllocated write FAllocated;
|
|
property ChangeTime:TFileTime read FChangeTime write FChangeTime;
|
|
property Origin:TNTFSDiskRecord read FOrigin write SetOrigin;
|
|
property Attribute:TNTFSDiskAttribute read FAttribute write FAttribute;
|
|
property Alternate:TNTFSDiskAttribute read FAlternate write FAlternate;
|
|
function GetDot:TNTFSDiskEntry;
|
|
function GetDotDot:TNTFSDiskEntry;
|
|
function CreateDot:TNTFSDiskEntry;
|
|
function CreateDotDot:TNTFSDiskEntry;
|
|
function UpdateDot:Boolean;
|
|
function UpdateDotDot(AEntry:TNTFSDiskEntry):Boolean;
|
|
function RecordNumber:Int64;
|
|
function FileReference:Int64;
|
|
function UpdateEntry:Boolean;
|
|
function UpdateRecord:Boolean;
|
|
function FindFirstName(AHandle:TFindHandle; AReference:Boolean):TDiskEntry; override;
|
|
function FindPrevName(AHandle:TFindHandle; AReference:Boolean):TDiskEntry; override;
|
|
function FindNextName(AHandle:TFindHandle; AReference:Boolean):TDiskEntry; override;
|
|
function FindLastName(AHandle:TFindHandle; AReference:Boolean):TDiskEntry; override;
|
NTFS disk access contol list
TNTFSDiskAcl = class(TDiskAcl)
Note: Data of attribute $SECURITY_DESCRIPTOR | |
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
public
| |
NTFS disk access control entry
TNTFSDiskAce = class(TDiskAce)
Note: Data of attribute $SECURITY_DESCRIPTOR | |
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
public
| |
NTFS entry list
TNTFSEntryList = class(TObject)
constructor Create;
|
|
destructor Destroy; override;
|
|
private
| |
FEntryCount:Integer;
|
|
FFirstEntry:TNTFSDiskEntry;
|
|
FLastEntry:TNTFSDiskEntry;
|
|
function Link(AEntry:TNTFSDiskEntry):Boolean;
|
|
function Unlink(AEntry:TNTFSDiskEntry):Boolean;
|
|
public
| |
property EntryCount:Integer read FEntryCount;
|
|
property FirstEntry:TNTFSDiskEntry read FFirstEntry;
|
|
property LastEntry:TNTFSDiskEntry read FLastEntry;
|
|
function Add(AEntry:TNTFSDiskEntry):Boolean;
|
|
function Remove(AEntry:TNTFSDiskEntry):Boolean;
|
|
procedure ClearList; virtual;
|
NTFS record list
TNTFSRecordList = class(TObject)
constructor Create;
|
|
destructor Destroy; override;
|
|
private
| |
FRecordCount:Integer;
|
|
FFirstRecord:TNTFSDiskRecord;
|
|
FLastRecord:TNTFSDiskRecord;
|
|
function Link(ARecord:TNTFSDiskRecord):Boolean;
|
|
function Unlink(ARecord:TNTFSDiskRecord):Boolean;
|
|
public
| |
property RecordCount:Integer read FRecordCount;
|
|
property FirstRecord:TNTFSDiskRecord read FFirstRecord;
|
|
property LastRecord:TNTFSDiskRecord read FLastRecord;
|
|
function Add(ARecord:TNTFSDiskRecord):Boolean;
|
|
function Remove(ARecord:TNTFSDiskRecord):Boolean;
|
|
procedure ClearList; virtual;
|
NTFS record index
TNTFSRecordIndex = class(TLinkedObjBtree)
Note: Index of FILE records. | |
constructor Create;
|
|
destructor Destroy; override;
|
|
private
| |
FLock:TSynchronizerHandle;
|
|
FRecordLocal:TMutexHandle;
|
|
FRunsLock:TSynchronizerHandle;
|
|
FItemsLock:TSynchronizerHandle;
|
|
FNodesLock:TSynchronizerHandle;
|
|
FIndexLock:TSynchronizerHandle;
|
|
FExtendedsLock:TSynchronizerHandle;
|
|
FAttributesLock:TSynchronizerHandle;
|
|
FRunLocal:TMutexHandle;
|
|
FItemLocal:TMutexHandle;
|
|
FKeyLocal:TMutexHandle;
|
|
FNodeLocal:TMutexHandle;
|
|
FExtendedLocal:TMutexHandle;
|
|
FAttributeLocal:TMutexHandle;
|
|
function Find(const ARecordNumber:Int64; ACurrent:TNTFSDiskRecord):TNTFSDiskRecord;
|
|
protected
| |
function CreateBlank:TBtreeObject; override;
|
|
function Compare(AEntry1,AEntry2:TBtreeObject):Integer; override;
|
|
public
| |
function CreateRecord(ABase:TNTFSDiskRecord; const ARecordNumber:Int64; AVersion:Word):TNTFSDiskRecord;
|
|
function DestroyRecord(ARecord:TNTFSDiskRecord):Boolean;
|
|
function NewRecord(ABase:TNTFSDiskRecord; const ARecordNumber:Int64; AVersion:Word):TNTFSDiskRecord;
|
|
function InsertRecord(ARecord:TNTFSDiskRecord):Boolean;
|
|
function DeleteRecord(ARecord:TNTFSDiskRecord):Boolean;
|
|
function RemoveRecord(ARecord:TNTFSDiskRecord):Boolean;
|
|
function FindRecord(const ARecordNumber:Int64):TNTFSDiskRecord;
|
|
function ReaderLock:Boolean;
|
|
function ReaderUnlock:Boolean;
|
|
function ReaderConvert:Boolean;
|
|
function WriterLock:Boolean;
|
|
function WriterUnlock:Boolean;
|
|
function WriterConvert:Boolean;
|
|
function RunsReaderLock:Boolean;
|
|
function RunsReaderUnlock:Boolean;
|
|
function RunsWriterLock:Boolean;
|
|
function RunsWriterUnlock:Boolean;
|
|
function ItemsReaderLock:Boolean;
|
|
function ItemsReaderUnlock:Boolean;
|
|
function ItemsWriterLock:Boolean;
|
|
function ItemsWriterUnlock:Boolean;
|
|
function NodesReaderLock:Boolean;
|
|
function NodesReaderUnlock:Boolean;
|
|
function NodesWriterLock:Boolean;
|
|
function NodesWriterUnlock:Boolean;
|
|
function IndexReaderLock:Boolean;
|
|
function IndexReaderUnlock:Boolean;
|
|
function IndexWriterLock:Boolean;
|
|
function IndexWriterUnlock:Boolean;
|
|
function ExtendedsReaderLock:Boolean;
|
|
function ExtendedsReaderUnlock:Boolean;
|
|
function ExtendedsWriterLock:Boolean;
|
|
function ExtendedsWriterUnlock:Boolean;
|
|
function AttributesReaderLock:Boolean;
|
|
function AttributesReaderUnlock:Boolean;
|
|
function AttributesWriterLock:Boolean;
|
|
function AttributesWriterUnlock:Boolean;
|
NTFS disk record
TNTFSDiskRecord = class(TBtreeObject)
Note: Represents a FILE record entry. | |
constructor Create(ALocalLock:TMutexHandle; ABase:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
FRunsLock:TSynchronizerHandle;
|
|
FItemsLock:TSynchronizerHandle;
|
|
FNodesLock:TSynchronizerHandle;
|
|
FIndexLock:TSynchronizerHandle;
|
|
FExtendedsLock:TSynchronizerHandle;
|
|
FAttributesLock:TSynchronizerHandle;
|
|
FRunLocal:TMutexHandle;
|
|
FItemLocal:TMutexHandle;
|
|
FKeyLocal:TMutexHandle;
|
|
FNodeLocal:TMutexHandle;
|
|
FExtendedLocal:TMutexHandle;
|
|
FAttributeLocal:TMutexHandle;
|
|
FStatus:LongWord;
|
|
FPrevRecord:TNTFSDiskRecord;
|
|
FNextRecord:TNTFSDiskRecord;
|
|
FRecordFlags:Word;
|
Flags (See Consts) |
FHardLinkCount:Word;
|
Hard link count |
FSequenceNumber:Word;
|
Sequence number |
FNextAttributeId:Word;
|
Next Attribute Id |
FRecordNumber:Int64;
|
Number of this MFT Record |
FRecordSize:LongWord;
|
Actual size of the FILE record |
FRecordAllocated:LongWord;
|
Allocated size of the FILE record |
FAttributeOffset:Word;
|
Offset to the first Attribute |
FUpdateSequenceOffset:Word;
|
Offset to the Update Sequence Record |
FUpdateSequenceLength:Word;
|
Size in words of the Update Sequence Record |
FUpdateSequenceNumber:Word;
|
Update Sequence Number |
FLogFileSequenceNumber:Int64;
|
LogFile Sequence Number (LSN) |
FBase:TNTFSDiskRecord;
|
Base file record |
FLinks:TNTFSEntryList;
|
List of record links |
FStreams:TNTFSEntryList;
|
List of record streams |
FRecords:TNTFSRecordList;
|
List of child records |
FAttributes:TNTFSDiskAttributes;
|
List of record attributes |
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function GetResizing:Boolean;
|
|
procedure SetResizing(AValue:Boolean);
|
|
function GetRemoving:Boolean;
|
|
procedure SetRemoving(AValue:Boolean);
|
|
function GetMirrored:Boolean;
|
|
procedure SetMirrored(AValue:Boolean);
|
|
function GetMetafile:Boolean;
|
|
procedure SetMetafile(AValue:Boolean);
|
|
function GetReserved:Boolean;
|
|
procedure SetReserved(AValue:Boolean);
|
|
function GetExpansion:Boolean;
|
|
procedure SetExpansion(AValue:Boolean);
|
|
function GetOverflow:Boolean;
|
|
procedure SetOverflow(AValue:Boolean);
|
|
function GetExtension:Boolean;
|
|
procedure SetExtension(AValue:Boolean);
|
|
function GetIsUsed:Boolean;
|
|
procedure SetIsUsed(AValue:Boolean);
|
|
function GetIsFolder:Boolean;
|
|
procedure SetIsFolder(AValue:Boolean);
|
|
function GetIsUnknown1:Boolean;
|
|
procedure SetIsUnknown1(AValue:Boolean);
|
|
function GetIsIndexView:Boolean;
|
|
procedure SetIsIndexView(AValue:Boolean);
|
|
function GetOrigin:TNTFSDiskRecord;
|
|
function CreateLinks(ANew:Boolean):TNTFSEntryList;
|
|
function CreateStreams(ANew:Boolean):TNTFSEntryList;
|
|
function CreateRecords(ANew:Boolean):TNTFSRecordList;
|
|
function CreateAttributes(AVersion:Word; ANew:Boolean):TNTFSDiskAttributes;
|
|
public
| |
property Resizing:Boolean read GetResizing write SetResizing;
|
Record is being Resized |
property Removing:Boolean read GetRemoving write SetRemoving;
|
Record is being Removed |
property Mirrored:Boolean read GetMirrored write SetMirrored;
|
Record is in $MftMirr file |
property Metafile:Boolean read GetMetafile write SetMetafile;
|
Record is an NTFS metafile |
property Reserved:Boolean read GetReserved write SetReserved;
|
Record is an Mft reserved record |
property Expansion:Boolean read GetExpansion write SetExpansion;
|
Record is an Mft expansion record |
property Overflow:Boolean read GetOverflow write SetOverflow;
|
Record has an attribute list attribute |
property Extension:Boolean read GetExtension write SetExtension;
|
Record is an extension of the base record |
property PrevRecord:TNTFSDiskRecord read FPrevRecord write FPrevRecord;
|
|
property NextRecord:TNTFSDiskRecord read FNextRecord write FNextRecord;
|
|
property IsUsed:Boolean read GetIsUsed write SetIsUsed;
|
Record is in use |
property IsFolder:Boolean read GetIsFolder write SetIsFolder;
|
Record is a folder |
property IsUnknown1:Boolean read GetIsUnknown1 write SetIsUnknown1;
| |
property IsIndexView:Boolean read GetIsIndexView write SetIsIndexView;
|
Record is an index view |
property RecordFlags:Word read FRecordFlags write FRecordFlags;
|
|
property HardLinkCount:Word read FHardLinkCount write FHardLinkCount;
|
|
property SequenceNumber:Word read FSequenceNumber write FSequenceNumber;
|
|
property NextAttributeId:Word read FNextAttributeId write FNextAttributeId;
|
|
property RecordNumber:Int64 read FRecordNumber write FRecordNumber;
|
|
property RecordSize:LongWord read FRecordSize write FRecordSize;
|
|
property RecordAllocated:LongWord read FRecordAllocated write FRecordAllocated;
|
|
property AttributeOffset:Word read FAttributeOffset write FAttributeOffset;
|
|
property UpdateSequenceOffset:Word read FUpdateSequenceOffset write FUpdateSequenceOffset;
|
|
property UpdateSequenceLength:Word read FUpdateSequenceLength write FUpdateSequenceLength;
|
|
property UpdateSequenceNumber:Word read FUpdateSequenceNumber write FUpdateSequenceNumber;
|
|
property LogFileSequenceNumber:Int64 read FLogFileSequenceNumber write FLogFileSequenceNumber;
|
|
property Base:TNTFSDiskRecord read FBase write FBase;
|
|
property Links:TNTFSEntryList read FLinks;
|
|
property Streams:TNTFSEntryList read FStreams;
|
|
property Records:TNTFSRecordList read FRecords;
|
|
property Attributes:TNTFSDiskAttributes read FAttributes;
|
|
property Origin:TNTFSDiskRecord read GetOrigin;
|
|
function CreateLink(AAttribute,AAlternate:TNTFSDiskAttribute; ANew:Boolean):TNTFSDiskEntry;
|
|
function DestroyLink(ALink:TNTFSDiskEntry):Boolean;
|
|
function NewLink(AAttribute,AAlternate:TNTFSDiskAttribute):TNTFSDiskEntry;
|
|
function GetLink(AAttribute:TNTFSDiskAttribute):TNTFSDiskEntry;
|
|
function DeleteLink(ALink:TNTFSDiskEntry):Boolean;
|
|
function RenameLink(ALink:TNTFSDiskEntry; AAttribute,AAlternate:TNTFSDiskAttribute):Boolean;
|
|
function CreateStream(AAttribute:TNTFSDiskAttribute; ANew:Boolean):TNTFSDiskEntry;
|
|
function DestroyStream(AStream:TNTFSDiskEntry):Boolean;
|
|
function NewStream(AAttribute:TNTFSDiskAttribute):TNTFSDiskEntry;
|
|
function GetStream(AAttribute:TNTFSDiskAttribute):TNTFSDiskEntry;
|
|
function DeleteStream(AStream:TNTFSDiskEntry):Boolean;
|
|
function GetFileNameByKey(AKey:TNTFSAttributeKey):TNTFSDiskAttribute;
|
|
function GetFileNameByName(const AName:String; AInstance:Integer):TNTFSDiskAttribute;
|
|
function GetFileNameByParent(const AName:String; const AParent:Int64; AInstance:Integer):TNTFSDiskAttribute;
|
|
function GetFileNameByNameSpace(const AName:String; const AParent:Int64; ANameSpace:Byte; AInstance:Integer):TNTFSDiskAttribute;
|
|
function GetRecord(AInstance:Integer):TNTFSDiskRecord;
|
|
function GetRecordByFree(AFree:LongWord; AExclude:Boolean):TNTFSDiskRecord;
|
|
function GetRecordByReference(const AFileReference:Int64):TNTFSDiskRecord;
|
|
function AddRecord(ARecord:TNTFSDiskRecord):Boolean;
|
|
function RemoveRecord(ARecord:TNTFSDiskRecord):Boolean;
|
|
function GetAttributeByItem(AItem:TNTFSDiskItem):TNTFSDiskAttribute;
|
|
function GetAttributeByStatus(AInclude,AExclude:Word; AInstance:Integer):TNTFSDiskAttribute;
|
|
function GetAttributeByVCN(AAttribute:TNTFSDiskAttribute; const AVCN:Int64; var AInstance:LongWord):TNTFSDiskAttribute;
|
|
function GetAttributeByUnit(AAttribute:TNTFSDiskAttribute; const AUnit:Int64; var AInstance:LongWord):TNTFSDiskAttribute;
|
|
function CreateAttribute(AType:LongWord; AVersion:Word; ANew:Boolean):TNTFSDiskAttribute;
|
|
function DestroyAttribute(AAttribute:TNTFSDiskAttribute):Boolean;
|
|
function NewAttribute(APrevious:TNTFSDiskAttribute; AType:LongWord; const AName:String; AVersion:Word):TNTFSDiskAttribute;
|
|
function GetAttribute(AType:LongWord; const AName:String; AInstance:Integer):TNTFSDiskAttribute;
|
|
function RemoveAttribute(AAttribute:TNTFSDiskAttribute):Boolean;
|
|
function MoveAttribute(ADest:TNTFSDiskRecord; AAttribute:TNTFSDiskAttribute):Boolean;
|
|
function RenameAttribute(AAttribute:TNTFSDiskAttribute; const AName:String):Boolean;
|
|
function FileReference:Int64;
|
|
function BaseReference:Int64;
|
File reference to the base FILE record |
function LinkCount:LongWord;
|
|
function StreamCount:LongWord;
|
|
function RecordCount:LongWord;
|
|
function AttributeCount:LongWord;
|
|
function RecordFree:LongWord;
|
|
function AttributeSize(AVersion:Word; AType:LongWord):LongWord;
|
|
function CalculatedSize(AVersion:Word):LongWord;
|
|
function CalculatedOffset(AVersion:Word):Word;
|
|
function CalculatedSequenceOffset(AVersion:Word):Word;
|
|
function CalculatedSequenceLength(ASectorSize:Word):Word;
|
|
function CalculatedStreamUsed(AVersion:Word; AAttribute:TNTFSDiskAttribute):Int64;
|
|
function ReadAttributes(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteAttributes(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function ReadRecord(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word; AFree:Boolean):Boolean;
|
|
function WriteRecord(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS disk index
TNTFSDiskIndex = class(TLinkedObjBtree)
Note: Index of INDX records. | |
constructor Create(AKeyLocal:TMutexHandle; ALock:TSynchronizerHandle; AVolumeVersion,ASectorSize:Word; AIndexType,ACollateRule:LongWord; AAttribute:TNTFSDiskAttribute);
|
|
destructor Destroy; override;
|
|
private
| |
FLock:TSynchronizerHandle;
|
|
FKeyLocal:TMutexHandle;
|
|
FStatus:LongWord;
|
|
FSectorSize:Word;
|
|
FVolumeVersion:Word;
|
|
FIndexType:LongWord;
|
Attribute Type (Or None if Data Index) |
FCollateRule:LongWord;
|
Collation Rule |
FIndexRecordSize:LongWord;
|
Size of Index Allocation Entry (bytes) |
FIndexCounterOffset:LongWord;
|
Index Record Number increment |
FClustersPerIndex:LongWord;
|
Clusters per INDX Record or 0 if less than cluster size |
FIndexsPerCluster:LongWord;
|
INDX Records per Cluster or 0 if more than cluster size |
FIndexCounterShift:Word;
|
Shift count for Record -> Counter |
FIndexRecordShiftCount:Word;
|
Shift count for Record -> VCN |
FIndexRecordOffsetMask:Int64;
|
Mask for Record offset calculation |
FTotalIndexRecordCount:Int64;
|
Total number of index records in index |
FLastFreeIndexRecord:Int64;
|
Or ntfsUnknownRecordNumber if not known |
FFreeIndexRecordCount:Int64;
|
Or ntfsUnknownRecordNumber if not known |
FCompareSecurityDescriptor:TNTFSCompareSecurityDescriptor;
|
|
FUpCase:TNTFSUpCase;
|
Uppercase Conversion Table |
FNodes:TNTFSDiskNodes;
|
List of index nodes |
FAttribute:TNTFSDiskAttribute;
|
Attribute owning this index |
function GetNodesLock:TSynchronizerHandle;
|
|
function GetKeyLocal:TMutexHandle;
|
|
function GetNodeLocal:TMutexHandle;
|
|
function GetLoaded:Boolean;
|
|
procedure SetLoaded(AValue:Boolean);
|
|
function GetChanged:Boolean;
|
|
function GetUpCase:PNTFSUpCaseData;
|
|
function GetRootNode:TNTFSDiskNode;
|
|
function CreateNodes(ANew:Boolean):TNTFSDiskNodes;
|
|
function CompareKey(AEntry1,AEntry2:Pointer; ASize1,ASize2:Word):Integer;
|
|
function CompareBinary(AEntry1,AEntry2:Pointer; ASize1,ASize2:Word):Integer;
|
|
function CompareFileName(AEntry1,AEntry2:PWideChar; ASize1,ASize2:Word):Integer;
|
|
function CompareUnicode(AEntry1,AEntry2:PWideChar; ASize1,ASize2:Word):Integer;
|
|
function CompareLongWord(AEntry1,AEntry2:LongWord; ASize1,ASize2:Word):Integer;
|
|
function CompareSID(AEntry1,AEntry2:PSID; ASize1,ASize2:Word):Integer;
|
|
function CompareSecurityHash(AEntry1,AEntry2:PNTFSSecurityHashKeyData; ASize1,ASize2:Word):Integer;
|
|
function CompareGUID(AEntry1,AEntry2:PGUID; ASize1,ASize2:Word):Integer;
|
|
protected
| |
function GetEnd(AEntry:TBtreeObject):TBtreeObject; override;
|
|
function GetStart(AEntry:TBtreeObject):TBtreeObject; override;
|
|
function GetBlank(AEntry:TBtreeObject):TBtreeObject; override;
|
|
function GetMedian(AEntry:TBtreeObject):TBtreeObject; override;
|
|
function GetDropTest(AEntry:TBtreeObject; var ALeft:Boolean):TBtreeObject;
|
|
function GetDrop(AEntry:TBtreeObject; var ALeft:Boolean):TBtreeObject; override;
|
|
function GetMerge(AEntry:TBtreeObject):TBtreeObject; override;
|
|
function GetBorrow(AEntry:TBtreeObject):TBtreeObject; override;
|
|
function GetTarget(ADrop:TBtreeObject; ALeft:Boolean):TBtreeObject; override;
|
|
function PushNode(AEntry:TBtreeObject):Boolean; override;
|
|
function SplitNode(AEntry:TBtreeObject):Boolean; override;
|
|
function DropNode(AEntry,ADrop,ATarget:TBtreeObject; ALeft:Boolean):Boolean; override;
|
|
function DropNodeOld(AEntry,ADrop:TBtreeObject; ALeft:Boolean):Boolean; override;
|
|
function MergeNode(AEntry,AMerge:TBtreeObject):Boolean; override;
|
|
function BorrowEntry(AEntry,ABorrow:TBtreeObject):Boolean; override;
|
|
function SwapEntry(AEntry,ASwap:TBtreeObject;ALeft:Boolean):Boolean; override;
|
|
function SetParentEntry(AEntry,AParent:TBtreeObject):Boolean; override;
|
|
function DeleteBlank(ABlank:TBtreeObject):Boolean; override;
|
|
function AttachBlank(ABlank:TBtreeObject):Boolean; override;
|
|
function DetachBlank(ABlank:TBtreeObject):Boolean; override;
|
|
function AttachEntry(AEntry:TBtreeObject):Boolean; override;
|
|
function DetachEntry(AEntry:TBtreeObject):Boolean; override;
|
|
function RequirePush(AEntry:TBtreeObject):Boolean; override;
|
|
function RequireSplit(AEntry:TBtreeObject):Boolean; override;
|
|
function RequireDrop(AEntry:TBtreeObject):Boolean; override;
|
|
function RequireMerge(AEntry:TBtreeObject):Boolean; override;
|
|
function RequireBorrow(AEntry:TBtreeObject):Boolean; override;
|
|
public
| |
property Loaded:Boolean read GetLoaded write SetLoaded;
|
|
property Changed:Boolean read GetChanged;
|
|
property SectorSize:Word read FSectorSize write FSectorSize;
|
|
property VolumeVersion:Word read FVolumeVersion;
|
|
property IndexType:LongWord read FIndexType write FIndexType;
|
|
property CollateRule:LongWord read FCollateRule write FCollateRule;
|
|
property IndexRecordSize:LongWord read FIndexRecordSize write FIndexRecordSize;
|
|
property IndexCounterOffset:LongWord read FIndexCounterOffset write FIndexCounterOffset;
|
|
property ClustersPerIndex:LongWord read FClustersPerIndex write FClustersPerIndex;
|
|
property IndexsPerCluster:LongWord read FIndexsPerCluster write FIndexsPerCluster;
|
|
property IndexCounterShift:Word read FIndexCounterShift write FIndexCounterShift;
|
|
property IndexRecordShiftCount:Word read FIndexRecordShiftCount write FIndexRecordShiftCount;
|
|
property IndexRecordOffsetMask:Int64 read FIndexRecordOffsetMask write FIndexRecordOffsetMask;
|
|
property TotalIndexRecordCount:Int64 read FTotalIndexRecordCount write FTotalIndexRecordCount;
|
|
property LastFreeIndexRecord:Int64 read FLastFreeIndexRecord write FLastFreeIndexRecord;
|
|
property FreeIndexRecordCount:Int64 read FFreeIndexRecordCount write FFreeIndexRecordCount;
|
|
property CompareSecurityDescriptor:TNTFSCompareSecurityDescriptor read FCompareSecurityDescriptor write FCompareSecurityDescriptor;
|
|
property UpCase:TNTFSUpCase read FUpCase write FUpCase;
|
|
property Nodes:TNTFSDiskNodes read FNodes;
|
|
property Attribute:TNTFSDiskAttribute read FAttribute;
|
|
property RootNode:TNTFSDiskNode read GetRootNode;
|
|
function NodeCount:Integer;
|
|
function CreateKey(ANode:TNTFSDiskNode; ABlank:Boolean):TNTFSDiskKey; virtual;
|
|
function DestroyKey(AKey:TNTFSDiskKey):Boolean;
|
|
function NewKey(AKey,AData:Pointer; AKeySize,ADataSize:Word):TNTFSDiskKey; virtual;
|
|
function NewKeyEx(AKey,AData,APadding:Pointer; AKeySize,ADataSize,APaddingSize:Word):TNTFSDiskKey; virtual;
|
|
function AddKey(AParent,AKey:TNTFSDiskKey):Boolean;
|
|
function InsertKey(AKey:TNTFSDiskKey):Boolean;
|
|
function RemoveKey(AKey:TNTFSDiskKey):Boolean;
|
|
function CreateNode(ANew:Boolean):TNTFSDiskNode;
|
|
function DestroyNode(ANode:TNTFSDiskNode):Boolean;
|
|
function NewNode(const ARecordNumber:Int64):TNTFSDiskNode;
|
|
function GetNode(const ARecordNumber:Int64):TNTFSDiskNode;
|
|
function DeleteNode(ANode:TNTFSDiskNode):Boolean;
|
|
function RemoveNode(ANode:TNTFSDiskNode):Boolean;
|
|
function UpdateNodes(AVersion:Word):Boolean; virtual;
|
|
function FindKey(AValue:Pointer; ASize:Word):TNTFSDiskKey; virtual;
|
|
function ReadRoot(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteRoot(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function ReadKeys(AParent:TNTFSDiskKey; ANode:TNTFSDiskNode; ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteKeys(AParent:TNTFSDiskKey; ANode:TNTFSDiskNode; ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function ReaderLock:Boolean;
|
|
function ReaderUnlock:Boolean;
|
|
function WriterLock:Boolean;
|
|
function WriterUnlock:Boolean;
|
NTFS data index
TNTFSDataIndex = class(TNTFSDiskIndex)
private
| |
function CompareSecurityDescriptor(AHash1,AHash2,ASecurityId:LongWord; ADescriptor:Pointer; ASize:Word):Integer;
|
|
function Find(AValue:Pointer; ASize:Word; ACurrent:TNTFSDataKey):TNTFSDataKey;
|
|
function FindEx(AValue:Pointer; ASize:Word; AHash:LongWord; ACurrent:TNTFSDataKey):TNTFSDataKey;
|
|
protected
| |
function CreateBlank:TBtreeObject; override;
|
|
function Compare(AEntry1,AEntry2:TBtreeObject):Integer; override;
|
|
public
| |
function CreateKey(ANode:TNTFSDiskNode; ABlank:Boolean):TNTFSDiskKey; override;
|
|
function NewKey(AKey,AData:Pointer; AKeySize,ADataSize:Word):TNTFSDiskKey; override;
|
|
function GetKeyBySID(ASID:PSID):TNTFSDiskKey;
|
|
function GetKeyByOwner(AOwner:LongWord):TNTFSDiskKey;
|
|
function GetKeyByObjectId(const AObjectId:TGUID):TNTFSDiskKey;
|
|
function GetKeyBySecurity(ASecurity:TNTFSSecurity):TNTFSDiskKey;
|
|
function GetKeyByReparse(AReparseTag:LongWord; const AFileReference:Int64):TNTFSDiskKey;
|
|
function FindKey(AValue:Pointer;ASize:Word):TNTFSDiskKey; override;
|
NTFS padded index
TNTFSPaddedIndex = class(TNTFSDataIndex)
Note: A DataIndex that allows a block of Padding to be specified. | |
protected
| |
function CreateBlank:TBtreeObject; override;
|
|
private
| |
function CreateBlank:TBtreeObject; override;
|
|
public
| |
function CreateKey(ANode:TNTFSDiskNode; ABlank:Boolean):TNTFSDiskKey; override;
|
|
function NewKey(AKey,AData:Pointer; AKeySize,ADataSize:Word):TNTFSDiskKey; override;
|
|
function NewKeyEx(AKey,AData,APadding:Pointer; AKeySize,ADataSize,APaddingSize:Word):TNTFSDiskKey; override;
|
NTFS attribute index
TNTFSAttributeIndex = class(TNTFSDiskIndex)
private
| |
function Find(AValue:Pointer; ASize:Word; ACurrent:TNTFSAttributeKey):TNTFSAttributeKey;
|
|
protected
| |
function CreateBlank:TBtreeObject; override;
|
|
function Compare(AEntry1,AEntry2:TBtreeObject):Integer; override;
|
|
public
| |
function CreateKey(ANode:TNTFSDiskNode; ABlank:Boolean):TNTFSDiskKey; override;
|
|
function NewKey(AKey,AData:Pointer; AKeySize,ADataSize:Word):TNTFSDiskKey; override;
|
|
function GetKeyByFileName(const AFileName:String):TNTFSDiskKey;
|
|
function NewKeyByAttribute(AAttribute:TNTFSDiskAttribute):TNTFSDiskKey;
|
|
function GetKeyByAttribute(AAttribute:TNTFSDiskAttribute):TNTFSDiskKey;
|
|
function FindKey(AValue:Pointer; ASize:Word):TNTFSDiskKey; override;
|
NTFS disk nodes
TNTFSDiskNodes = class(TFileSysListEx)
constructor Create(ANodeLocal:TMutexHandle; ALock:TSynchronizerHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FNodeLocal:TMutexHandle;
|
|
function GetModified:Boolean;
|
|
procedure SetModified(AValue:Boolean);
|
|
public
| |
property Modified:Boolean read GetModified write SetModified;
|
|
function TotalSize:LongWord;
|
|
function NodeCount:LongWord;
|
NTFS disk node
TNTFSDiskNode = class(TListObject)
Note: Represents an INDX record header. | |
constructor Create(ALocalLock:TMutexHandle; AIndex:TNTFSDiskIndex);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
FStatus:LongWord;
|
|
FIndexFlags:Word;
|
Flags (See Consts) |
FIndexSize:LongWord;
|
Total size of the Index Entries |
FIndexAllocated:LongWord;
|
Allocated size of the Index Entries |
FEntryOffset:LongWord;
|
Offset to first Index Entry |
FRecordNumber:Int64;
|
Number of this INDX record in the Index Allocation |
FUpdateSequenceOffset:Word;
|
Offset to the Update Sequence Record |
FUpdateSequenceLength:Word;
|
Size in words of the Update Sequence Record |
FUpdateSequenceNumber:Word;
|
Update Sequence Number |
FLogFileSequenceNumber:Int64;
|
LogFile sequence number |
FIndex:TNTFSDiskIndex;
|
Index owning this node |
FBlank:TNTFSDiskKey;
|
Blank key of this node (Blank keys do not move) |
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function GetAdded:Boolean;
|
|
procedure SetAdded(AValue:Boolean);
|
|
function GetDeleted:Boolean;
|
|
procedure SetDeleted(AValue:Boolean);
|
|
function GetChanged:Boolean;
|
|
procedure SetChanged(AValue:Boolean);
|
|
function GetModified:Boolean;
|
|
procedure SetModified(AValue:Boolean);
|
|
function GetIsRoot:Boolean;
|
|
function GetHasSubNodes:Boolean;
|
|
procedure SetHasSubNodes(AValue:Boolean);
|
|
function GetStart:TNTFSDiskKey;
|
|
public
| |
property Added:Boolean read GetAdded write SetAdded;
|
Index record to be allocated |
property Deleted:Boolean read GetDeleted write SetDeleted;
|
Index record to be deallocated |
property Changed:Boolean read GetChanged write SetChanged;
|
Index record to be updated |
property Modified:Boolean read GetModified write SetModified;
|
Index record has been added, deleted or changed |
property IsRoot:Boolean read GetIsRoot;
|
|
property HasSubNodes:Boolean read GetHasSubNodes write SetHasSubNodes;
|
|
property IndexFlags:Word read FIndexFlags write FIndexFlags;
|
|
property IndexSize:LongWord read FIndexSize write FIndexSize;
|
|
property IndexAllocated:LongWord read FIndexAllocated write FIndexAllocated;
|
|
property EntryOffset:LongWord read FEntryOffset write FEntryOffset;
|
|
property RecordNumber:Int64 read FRecordNumber write FRecordNumber;
|
|
property UpdateSequenceOffset:Word read FUpdateSequenceOffset write FUpdateSequenceOffset;
|
|
property UpdateSequenceLength:Word read FUpdateSequenceLength write FUpdateSequenceLength;
|
|
property UpdateSequenceNumber:Word read FUpdateSequenceNumber write FUpdateSequenceNumber;
|
|
property LogFileSequenceNumber:Int64 read FLogFileSequenceNumber write FLogFileSequenceNumber;
|
|
property Index:TNTFSDiskIndex read FIndex;
|
|
property Blank:TNTFSDiskKey read FBlank write FBlank;
|
|
property Start:TNTFSDiskKey read GetStart;
|
|
function KeyCount:Integer;
|
|
function IndexFree:LongWord;
|
|
function UpdateKeys(AVersion:Word):Boolean; virtual;
|
|
function CalculatedSize(AVersion:Word):LongWord;
|
|
function CalculatedOffset(AVersion:Word):LongWord;
|
|
function CalculatedAllocated(AVersion:Word):LongWord;
|
|
function CalculatedSequenceOffset(AVersion:Word):Word;
|
|
function CalculatedSequenceLength(ASectorSize:Word):Word;
|
|
function WriteEmpty(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word; var AUpdateSequenceOffset,AUpdateSequenceLength:Word):Boolean;
|
|
function ReadRecord(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteRecord(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function ReadHeader(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteHeader(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS disk key
TNTFSDiskKey = class(TBtreeObject)
Note: Represents an INDX record entry. | |
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
FStatus:LongWord;
|
|
FKey:Pointer;
|
|
FEntryFlags:Word;
|
Flags (See Consts) |
FEntrySize:Word;
|
Length of the index entry |
FKeySize:Word;
|
Length of the key entry |
FSubNodeNumber:Int64;
|
Number of the sub-node in the index allocation attribute |
FNode:TNTFSDiskNode;
|
Index node of this key |
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function GetChanged:Boolean;
|
|
procedure SetChanged(AValue:Boolean);
|
|
function GetHasSubNode:Boolean;
|
|
procedure SetHasSubNode(AValue:Boolean);
|
|
function GetIsLastNode:Boolean;
|
|
procedure SetIsLastNode(AValue:Boolean);
|
|
procedure SetKeySize(ASize:Word); virtual;
|
|
procedure SetSubNodeNumber(const ANodeNumber:Int64);
|
|
procedure SetNode(ANode:TNTFSDiskNode);
|
|
public
| |
property Changed:Boolean read GetChanged write SetChanged;
|
Index record to be updated |
property HasSubNode:Boolean read GetHasSubNode write SetHasSubNode;
|
|
property IsLastNode:Boolean read GetIsLastNode write SetIsLastNode;
|
|
property Key:Pointer read FKey;
|
|
property EntryFlags:Word read FEntryFlags write FEntryFlags;
|
|
property EntrySize:Word read FEntrySize write FEntrySize;
|
|
property KeySize:Word read FKeySize write SetKeySize;
|
|
property SubNodeNumber:Int64 read FSubNodeNumber write SetSubNodeNumber;
|
|
property Node:TNTFSDiskNode read FNode write SetNode;
|
|
function CalculatedSize(AVersion:Word):Word; virtual;
|
|
function ReadKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;
|
|
function WriteKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;
|
NTFS data key
TNTFSDataKey = class(TNTFSDiskKey)
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FData:Pointer;
|
|
FDataSize:Word;
|
Size of the data (Only valid when the last entry flag is not set) |
procedure SetKeySize(ASize:Word); override;
|
|
procedure SetData(AData:Pointer);
|
|
procedure SetDataSize(ASize:Word);
|
|
public
| |
property Data:Pointer read FData write SetData;
|
|
property DataSize:Word read FDataSize write SetDataSize;
|
|
function DataOffset:Word;
|
Offset to the data (Only valid when the last entry flag is not set) |
function CalculatedSize(AVersion:Word):Word; override;
|
|
function ReadKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
NTFS padded key
TNTFSPaddedKey = class(TNTFSDataKey)
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FPadding:Pointer;
|
|
FPaddingSize:Word;
|
|
procedure SetPadding(APadding:Pointer);
|
|
procedure SetPaddingSize(ASize:Word);
|
|
public
| |
property Padding:Pointer read FPadding write SetPadding;
|
|
property PaddingSize:Word read FPaddingSize write SetPaddingSize;
|
|
function ReadKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
NTFS attribute key
TNTFSAttributeKey = class(TNTFSDiskKey)
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FFileReference:Int64;
|
File reference (Only valid when the last entry flag is not set) |
FAttribute:TNTFSDiskAttribute;
|
Indexed attribute of this key |
function GetInvalid:Boolean;
|
|
procedure SetInvalid(AValue:Boolean);
|
|
procedure SetKeySize(ASize:Word); override;
|
|
procedure SetAttribute(AAttribute:TNTFSDiskAttribute);
|
|
public
| |
property Invalid:Boolean read GetInvalid write SetInvalid;
|
Key points to invalid file record or attribute |
property FileReference:Int64 read FFileReference write FFileReference;
|
|
property Attribute:TNTFSDiskAttribute read FAttribute write SetAttribute;
|
|
function UpdateKey:Boolean;
|
|
function RecordNumber:Int64;
|
|
function CalculatedSize(AVersion:Word):Word; override;
|
|
function ReadKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteKey(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
NTFS disk runs
TNTFSDiskRuns = class(TFileSysListEx)
constructor Create(ARunLocal:TMutexHandle; ALock:TSynchronizerHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FRunLocal:TMutexHandle;
|
|
FRecent:TNTFSDiskRun;
|
|
FRecentVCN:Int64;
|
|
function GetStart:TNTFSDiskRun;
|
|
function GetFinal:TNTFSDiskRun;
|
|
public
| |
property Recent:TNTFSDiskRun read FRecent write FRecent;
|
|
property RecentVCN:Int64 read FRecentVCN write FRecentVCN;
|
|
function SparseCount:Int64;
|
Count of sparse runs in list |
function ClusterCount:Int64;
|
Count of normal runs in list |
function AllocatedCount:Int64;
|
Count of allocated runs in list |
function TotalSize:LongWord;
|
Total size of the encoded data runs |
function RunCount:LongWord;
|
NTFS disk run
TNTFSDiskRun = class(TListObject)
constructor Create(ALocalLock:TMutexHandle; AAttribute:TNTFSDiskAttribute);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
FStart:Int64;
|
Run start logical cluster |
FOffset:Int64;
|
Run start cluster offset |
FLength:Int64;
|
Run length in clusters |
FAttribute:TNTFSDiskAttribute;
|
Attribute owning this run |
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function GetIsLast:Boolean;
|
|
function GetIsSparse:Boolean;
|
|
function GetOffsetSize:Byte;
|
|
function GetLengthSize:Byte;
|
|
procedure SetStart(const AStart:Int64);
|
|
procedure SetOffset(const AOffset:Int64);
|
|
function GetSuccessor:TNTFSDiskRun;
|
|
function GetPredecessor:TNTFSDiskRun;
|
|
public
| |
property IsLast:Boolean read GetIsLast;
|
|
property IsSparse:Boolean read GetIsSparse;
|
|
property Start:Int64 read FStart write SetStart;
|
|
property Offset:Int64 read FOffset write SetOffset;
|
|
property Length:Int64 read FLength write FLength;
|
|
property Attribute:TNTFSDiskAttribute read FAttribute;
|
|
function RunSize:LongWord;
|
Size of the encoded data run |
function UpdateRun:Boolean;
|
|
function ReadRun(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean;
|
|
function WriteRun(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean;
|
NTFS disk items
TNTFSDiskItems = class(TFileSysListEx)
constructor Create(AItemLocal:TMutexHandle; ALock:TSynchronizerHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FItemLocal:TMutexHandle;
|
|
FStatus:LongWord;
|
|
function GetLoaded:Boolean;
|
|
procedure SetLoaded(AValue:Boolean);
|
|
function GetPrevious(AItem:TNTFSDiskItem):TNTFSDiskItem;
|
|
public
| |
property Loaded:Boolean read GetLoaded write SetLoaded;
|
|
function TotalSize:Int64;
|
|
function ItemCount:LongWord;
|
NTFS disk item
TNTFSDiskItem = class(TListObject)
Note: Data of attribute $ATTRIBUTE_LIST | |
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskAttribute);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
FStatus:LongWord;
|
|
FItemSize:Word;
|
Record length |
FStartVCN:Int64;
|
Starting VCN if non resident |
FFileReference:Int64;
|
File Reference of the attribute |
FAttributeType:LongWord;
|
Attribute Type |
FAttributeId:Word;
|
Attribute Id |
FAttributeName:String;
|
Name in Unicode (if NameLength > 0) |
FParent:TNTFSDiskAttribute;
|
Attribute list owning this item |
FAttribute:TNTFSDiskAttribute;
|
Attribute pointed to by this item |
FAttributeHash:LongWord;
|
|
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function GetInvalid:Boolean;
|
|
procedure SetInvalid(AValue:Boolean);
|
|
function GetAttributeName:String;
|
|
procedure SetAttributeName(const AAttributeName:String);
|
|
procedure SetAttribute(AAttribute:TNTFSDiskAttribute);
|
|
function Compare(AItem:TNTFSDiskItem):Integer; virtual;
|
|
public
| |
property Invalid:Boolean read GetInvalid write SetInvalid;
|
Item points to invalid file record or attribute |
property ItemSize:Word read FItemSize write FItemSize;
|
|
property StartVCN:Int64 read FStartVCN write FStartVCN;
|
|
property FileReference:Int64 read FFileReference write FFileReference;
|
|
property AttributeType:LongWord read FAttributeType write FAttributeType;
|
|
property AttributeId:Word read FAttributeId write FAttributeId;
|
|
property AttributeName:String read GetAttributeName write SetAttributeName;
|
|
property Parent:TNTFSDiskAttribute read FParent;
|
|
property Attribute:TNTFSDiskAttribute read FAttribute write SetAttribute;
|
|
property AttributeHash:LongWord read FAttributeHash;
|
|
function RecordNumber:Int64;
|
|
function AttributeNameSize:Word;
|
|
function AttributeNameLength:Byte;
|
Name length |
function AttributeNameOffset:Byte;
|
Offset to Name |
function UpdateItem:Boolean;
|
|
function CalculatedSize(AVersion:Word):Word;
|
|
function ReadItem(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteItem(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS disk attributes
TNTFSDiskAttributes = class(TFileSysListEx)
constructor Create(AAttributeLocal:TMutexHandle; ALock:TSynchronizerHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FAttributeLocal:TMutexHandle;
|
|
function GetPrevious(AAttribute:TNTFSDiskAttribute):TNTFSDiskAttribute;
|
|
public
| |
function TotalSize:LongWord;
|
|
function AttributeCount:LongWord;
|
NTFS disk attribute
TNTFSDiskAttribute = class(TListObject)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
protected
| |
FStatus:LongWord;
|
|
FData:Pointer;
|
Only applicable if attribute is resident |
FAttributeType:LongWord;
|
Attribute Type (e.g. 0x80, 0xA0) |
FAttributeSize:LongWord;
|
Length of the Attribute (including header) |
FAttributeFlags:Word;
|
Attribute Flags |
FAttributeId:Word;
|
Attribute Id |
FAttributeName:String;
|
Attribute Name |
FNonResident:Byte;
|
Non-resident flag |
FIndexed:Byte;
|
Indexed flag |
FDataSize:LongWord;
|
Length of the Attribute Data |
FStartVCN:Int64;
|
Starting VCN |
FLastVCN:Int64;
|
Last VCN |
FStreamSize:Int64;
|
Real size of the attribute |
FStreamUsed:Int64;
|
The actual Allocated size of the attribute (Only present when compressed and only in the first instance) |
FStreamAllocated:Int64;
|
Allocated size of the attribute |
FInitializedSize:Int64;
|
Initialized data size of the stream (Portion which has been Written) |
FCompressionUnit:Word;
|
Compression Unit Size |
FRuns:TNTFSDiskRuns;
|
List of runs of this attribute |
FItems:TNTFSDiskItems;
|
List of items of this attribute |
FIndex:TNTFSDiskIndex;
|
Index of this attribute if applicable |
FParent:TNTFSDiskRecord;
|
Record owning this attribute |
FAttributeHash:LongWord;
|
|
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function GetRunsLock:TSynchronizerHandle;
|
|
function GetItemsLock:TSynchronizerHandle;
|
|
function GetIndexLock:TSynchronizerHandle;
|
|
function GetExtendedsLock:TSynchronizerHandle;
|
|
function GetRunLocal:TMutexHandle;
|
|
function GetItemLocal:TMutexHandle;
|
|
function GetKeyLocal:TMutexHandle;
|
|
function GetExtendedLocal:TMutexHandle;
|
|
function GetUpdating:Boolean;
|
|
procedure SetUpdating(AValue:Boolean);
|
|
function GetIsFixed:Boolean;
|
|
function GetIsSingle:Boolean;
|
|
function GetIsUnlisted:Boolean;
|
|
function GetIsUnmovable:Boolean;
|
|
function GetIsManaged:Boolean;
|
|
function GetIsSparse:Boolean;
|
|
procedure SetIsSparse(AValue:Boolean);
|
|
function GetIsEncrypted:Boolean;
|
|
procedure SetIsEncrypted(AValue:Boolean);
|
|
function GetIsCompressed:Boolean;
|
|
procedure SetIsCompressed(AValue:Boolean);
|
|
function GetAttributeName:String;
|
|
procedure SetAttributeName(const AAttributeName:String);
|
|
function GetDataSize:LongWord; virtual;
|
|
procedure SetDataSize(AValue:LongWord); virtual;
|
|
function Compare(AAttribute:TNTFSDiskAttribute):Integer; virtual;
|
|
function CreateRuns(ANew:Boolean):TNTFSDiskRuns;
|
|
function CreateItems(ANew:Boolean):TNTFSDiskItems;
|
|
function GetRecord(AInstance:Integer):TNTFSDiskRecord;
|
|
function GetAttribute(AType:LongWord; const AName:String; AInstance:Integer):TNTFSDiskAttribute;
|
|
public
| |
property Updating:Boolean read GetUpdating write SetUpdating;
|
|
property IsFixed:Boolean read GetIsFixed;
|
|
property IsSingle:Boolean read GetIsSingle;
|
|
property IsUnlisted:Boolean read GetIsUnlisted;
|
|
property IsUnmovable:Boolean read GetIsUnmovable;
|
|
property IsManaged:Boolean read GetIsManaged;
|
|
property IsSparse:Boolean read GetIsSparse write SetIsSparse;
|
|
property IsEncrypted:Boolean read GetIsEncrypted write SetIsEncrypted;
|
|
property IsCompressed:Boolean read GetIsCompressed write SetIsCompressed;
|
|
property Data:Pointer read FData;
|
|
property AttributeType:LongWord read FAttributeType;
|
|
property AttributeSize:LongWord read FAttributeSize write FAttributeSize;
|
|
property AttributeFlags:Word read FAttributeFlags write FAttributeFlags;
|
|
property AttributeId:Word read FAttributeId write FAttributeId;
|
|
property AttributeName:String read GetAttributeName write SetAttributeName;
|
|
property NonResident:Byte read FNonResident write FNonResident;
|
|
property Indexed:Byte read FIndexed write FIndexed;
|
|
property DataSize:LongWord read GetDataSize write SetDataSize;
|
|
property StartVCN:Int64 read FStartVCN write FStartVCN;
|
|
property LastVCN:Int64 read FLastVCN write FLastVCN;
|
|
property StreamSize:Int64 read FStreamSize write FStreamSize;
|
|
property StreamUsed:Int64 read FStreamUsed write FStreamUsed;
|
|
property StreamAllocated:Int64 read FStreamAllocated write FStreamAllocated;
|
|
property InitializedSize:Int64 read FInitializedSize write FInitializedSize;
|
|
property CompressionUnit:Word read FCompressionUnit write FCompressionUnit;
|
|
property Runs:TNTFSDiskRuns read FRuns;
|
|
property Items:TNTFSDiskItems read FItems;
|
|
property Index:TNTFSDiskIndex read FIndex;
|
|
property Parent:TNTFSDiskRecord read FParent write FParent;
|
|
property AttributeHash:LongWord read FAttributeHash;
|
|
function GetRunCount(const AVCN:Int64; var AStartVCN,ACount:Int64):Boolean;
|
|
function GetRunLength(const AVCN:Int64; var AStartVCN,ALength:Int64):Boolean;
|
|
function GetRunByUnit(const AUnit:Int64; var AStartVCN:Int64):TNTFSDiskRun;
|
|
function GetRunByCluster(const ACluster:Int64; var AStartVCN:Int64):TNTFSDiskRun;
|
|
function CreateRun(ANew:Boolean):TNTFSDiskRun;
|
|
function DestroyRun(ARun:TNTFSDiskRun):Boolean;
|
|
function NewRun(const AStart,ALength:Int64):TNTFSDiskRun;
|
|
function InsertRun(APrev:TNTFSDiskRun; const AStart,ALength:Int64):TNTFSDiskRun;
|
|
function GetRun(const AVCN:Int64; var AStartVCN:Int64):TNTFSDiskRun;
|
|
function GetRunOld(const AVCN:Int64; var AStartVCN:Int64):TNTFSDiskRun;
|
|
function MergeRun(ARun:TNTFSDiskRun):Boolean;
|
|
function SplitRun(ARun:TNTFSDiskRun; const ALength:Int64):Boolean;
|
|
function RemoveRun(ARun:TNTFSDiskRun):Boolean;
|
|
function MoveRun(ADest:TNTFSDiskAttribute; ARun:TNTFSDiskRun):Boolean;
|
|
function GetItemByAttribute(AAttribute:TNTFSDiskAttribute):TNTFSDiskItem;
|
|
function CreateItem(ANew:Boolean):TNTFSDiskItem;
|
|
function DestroyItem(AItem:TNTFSDiskItem):Boolean;
|
|
function NewItem(AAttribute:TNTFSDiskAttribute):TNTFSDiskItem;
|
|
function GetItem(AType:LongWord; const AName:String; AInstance:Integer):TNTFSDiskItem;
|
|
function RemoveItem(AItem:TNTFSDiskItem):Boolean;
|
|
function MoveItem(AItem:TNTFSDiskItem; AAttribute:TNTFSDiskAttribute):Boolean;
|
|
function RenameItem(AItem:TNTFSDiskItem; AAttribute:TNTFSDiskAttribute):Boolean;
|
|
function CreateIndex(AVersion,ASector:Word):Boolean; virtual;
|
|
function NewIndex(AVersion,ASector:Word; AType,ARule,ASize,AOffset:LongWord):Boolean; virtual;
|
|
function RecordNumber:Int64;
|
|
function FileReference:Int64;
|
|
function BaseReference:Int64;
|
|
function RunOffset:Word;
|
Offset to the Data Run |
function DataOffset:Word;
|
Offset to the Attribute Data |
function AttributeNameSize:Word;
|
|
function AttributeNameLength:Byte;
|
Name length |
function AttributeNameOffset:Word;
|
Offset to the Name |
function RunCount:LongWord;
|
|
function ItemCount:LongWord;
|
|
function CalculatedSize(AVersion:Word):LongWord; virtual;
|
|
function CalculatedDataSize(AVersion:Word):LongWord; virtual;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; virtual;
|
|
function CalculatedStreamUsed(AVersion:Word):Int64; virtual;
|
|
function CoalesceRun(ARun:TNTFSDiskRun):Boolean;
|
|
function UpdateRun(ARun:TNTFSDiskRun):Boolean;
|
|
function UpdateKey(AKey:TNTFSDiskKey):Boolean; virtual;
|
|
function UpdateItem(AItem:TNTFSDiskItem):Boolean; virtual;
|
|
function UpdateEntry(AEntry:TNTFSDiskEntry):Boolean; virtual;
|
|
function UpdateAttribute(AEntry:TNTFSDiskEntry):Boolean; virtual;
|
|
function ReadRuns(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean;
|
|
function WriteRuns(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean;
|
|
function ReadItems(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteItems(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; virtual;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; virtual;
|
|
function ReadAttribute(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;
|
|
function WriteAttribute(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;
|
NTFS standard information attribute
TNTFSStandardInformationAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FCreateTime:TFileTime;
|
File Creation |
FWriteTime:TFileTime;
|
File Altered |
FChangeTime:TFileTime;
|
MFT Changed |
FAccessTime:TFileTime;
|
File Read |
FAttributes:LongWord;
|
DOS File Permissions |
FMaxVersions:LongWord;
|
Maximum Number of Versions |
FVersionNo:LongWord;
|
Version Number |
FClassId:LongWord;
|
Class Id |
FOwnerId:LongWord;
|
Owner Id |
FSecurityId:LongWord;
|
Security Id |
FQuotaCharge:Int64;
|
Quota Charged |
FUpdateSequenceNumber:Int64;
|
Update Sequence Number |
public
| |
property CreateTime:TFileTime read FCreateTime write FCreateTime;
|
|
property WriteTime:TFileTime read FWriteTime write FWriteTime;
|
|
property ChangeTime:TFileTime read FChangeTime write FChangeTime;
|
|
property AccessTime:TFileTime read FAccessTime write FAccessTime;
|
|
property Attributes:LongWord read FAttributes write FAttributes;
|
|
property MaxVersions:LongWord read FMaxVersions write FMaxVersions;
|
|
property VersionNo:LongWord read FVersionNo write FVersionNo;
|
|
property ClassId:LongWord read FClassId write FClassId;
|
|
property OwnerId:LongWord read FOwnerId write FOwnerId;
|
|
property SecurityId:LongWord read FSecurityId write FSecurityId;
|
|
property QuotaCharge:Int64 read FQuotaCharge write FQuotaCharge;
|
|
property UpdateSequenceNumber:Int64 read FUpdateSequenceNumber write FUpdateSequenceNumber;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function UpdateEntry(AEntry:TNTFSDiskEntry):Boolean; override;
|
|
function UpdateAttribute(AEntry:TNTFSDiskEntry):Boolean; override;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS attribute list
TNTFSAttributeListAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
public
| |
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS file name attribute
TNTFSFileNameAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FParentReference:Int64;
|
File reference to the parent directory |
FCreateTime:TFileTime;
|
C Time - File Creation
Note: These fields are only updated when the filename is changed (See Standard Information instead) |
FWriteTime:TFileTime;
|
A Time - File Altered
Note: These fields are only updated when the filename is changed (See Standard Information instead) |
FChangeTime:TFileTime;
|
M Time - MFT Changed
Note: These fields are only updated when the filename is changed (See Standard Information instead) |
FAccessTime:TFileTime;
|
R Time - File Read
Note: These fields are only updated when the filename is changed (See Standard Information instead) |
FFileAllocated:Int64;
|
Allocated size of the file (As for CreateTime/WriteTime/ChangeTime etc) |
FFileSize:Int64;
|
Real size of the file (As for CreateTime/WriteTime/ChangeTime etc) |
FFileFlags:LongWord;
|
Flags, e.g. Directory, compressed, hidden (As for CreateTime/WriteTime/ChangeTime etc) |
FReparseTag:LongWord;
|
Used by EAs and Reparse |
FNameSpace:Byte;
|
Filename namespace |
FFileName:String;
|
File name |
FFileHash:LongWord;
|
|
function GetFileName:String;
|
|
procedure SetFileName(const AFileName:String);
|
|
public
| |
property ParentReference:Int64 read FParentReference write FParentReference;
|
|
property CreateTime:TFileTime read FCreateTime write FCreateTime;
|
|
property WriteTime:TFileTime read FWriteTime write FWriteTime;
|
|
property ChangeTime:TFileTime read FChangeTime write FChangeTime;
|
|
property AccessTime:TFileTime read FAccessTime write FAccessTime;
|
|
property FileAllocated:Int64 read FFileAllocated write FFileAllocated;
|
|
property FileSize:Int64 read FFileSize write FFileSize;
|
|
property FileFlags:LongWord read FFileFlags write FFileFlags;
|
|
property ReparseTag:LongWord read FReparseTag write FReparseTag;
|
|
property NameSpace:Byte read FNameSpace write FNameSpace;
|
|
property FileName:String read GetFileName write SetFileName;
|
|
property FileHash:LongWord read FFileHash;
|
|
function FileNameSize:Word;
|
|
function FileNameLength:Byte;
|
Filename length in characters |
function ParentRecord:Int64;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function UpdateEntry(AEntry:TNTFSDiskEntry):Boolean; override;
|
|
function UpdateAttribute(AEntry:TNTFSDiskEntry):Boolean; override;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS object Id attribute
TNTFSObjectIdAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FObjectId:TGUID;
|
GUID Object Id Unique Id assigned to file |
FBirthVolumeId:TGUID;
|
GUID Birth Volume Id Volume where file was created |
FBirthObjectId:TGUID;
|
GUID Birth Object Id Original Object Id of file |
FDomainId:TGUID;
|
GUID Domain Id Domain in which object was created |
public
| |
property ObjectId:TGUID read FObjectId write FObjectId;
|
|
property BirthVolumeId:TGUID read FBirthVolumeId write FBirthVolumeId;
|
|
property BirthObjectId:TGUID read FBirthObjectId write FBirthObjectId;
|
|
property DomainId:TGUID read FDomainId write FDomainId;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS volume version attribute
TNTFSVolumeVersionAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
protected
| |
procedure SetDataSize(AValue:LongWord); override;
|
NTFS security descriptor attribute
TNTFSSecurityDescriptorAttribute = class(TNTFSDiskAttribute)
Note: This is the same structure that is used for all security in Windows (File/Kernel/Registry etc). See TSecurityDescriptor and associated values in Security unit for more information. | |
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FSecurity:TNTFSSecurity;
|
|
public
| |
property Security:TNTFSSecurity read FSecurity;
|
|
function CreateSecurity:Boolean;
|
|
function NewSecurity(ASecurity:TNTFSSecurity):Boolean;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadSecurity(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteSecurity(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS volume name attribute
TNTFSVolumeNameAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FVolumeName:String;
|
Volume name |
function GetVolumeName:String;
|
|
procedure SetVolumeName(const AVolumeName:String);
|
|
public
| |
property VolumeName:String read GetVolumeName write SetVolumeName;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS volume information attribute
TNTFSVolumeInformationAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FMajorVersion:Byte;
|
Major version number |
FMinorVersion:Byte;
|
Minor version number |
FVolumeFlags:Word;
|
Flags |
public
| |
property MajorVersion:Byte read FMajorVersion write FMajorVersion;
|
|
property MinorVersion:Byte read FMinorVersion write FMinorVersion;
|
|
property VolumeFlags:Word read FVolumeFlags write FVolumeFlags;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS data attribute
TNTFSDataAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
protected
| |
procedure SetDataSize(AValue:LongWord); override;
|
|
public
| |
function UpdateEntry(AEntry:TNTFSDiskEntry):Boolean; override;
|
|
function UpdateAttribute(AEntry:TNTFSDiskEntry):Boolean; override;
|
NTFS index root attribute
TNTFSIndexRootAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FIndexType:LongWord;
|
Attribute Type |
FCollateRule:LongWord;
|
Collation Rule |
FIndexRecordSize:LongWord;
|
Size of Index Allocation Entry (bytes) |
FIndexCounterOffset:LongWord;
|
Index Record Number increment |
public
| |
property IndexType:LongWord read FIndexType write FIndexType;
|
|
property CollateRule:LongWord read FCollateRule write FCollateRule;
|
|
property IndexRecordSize:LongWord read FIndexRecordSize write FIndexRecordSize;
|
|
property IndexCounterOffset:LongWord read FIndexCounterOffset write FIndexCounterOffset;
|
|
function CreateIndex(AVersion,ASector:Word):Boolean; override;
|
|
function NewIndex(AVersion,ASector:Word; AType,ARule,ASize,AOffset:LongWord):Boolean; override;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS index allocation attribute
TNTFSIndexAllocationAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
protected
| |
procedure SetDataSize(AValue:LongWord); override;
|
NTFS bitmap attribute
TNTFSBitmapAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FBitmap:Pointer;
|
|
FBitmapSize:LongWord;
|
|
protected
| |
procedure SetDataSize(AValue:LongWord); override;
|
|
procedure SetBitmapSize(AValue:LongWord);
|
|
public
| |
property Bitmap:Pointer read FBitmap;
|
|
property BitmapSize:LongWord read FBitmapSize write SetBitmapSize;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
NTFS reparse point attribute
TNTFSReparsePointAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FReparseTag:LongWord;
|
Reparse Type (and Flags) |
FReparseSize:Word;
|
Reparse Data Length |
FReparseGUID:TGUID;
|
Reparse GUID |
FReparse:TNTFSReparse;
|
|
function GetIsAlias:Boolean;
|
|
procedure SetIsAlias(AValue:Boolean);
|
|
function GetIsHighLatency:Boolean;
|
|
procedure SetIsHighLatency(AValue:Boolean);
|
|
function GetIsMicrosoft:Boolean;
|
|
procedure SetIsMicrosoft(AValue:Boolean);
|
|
public
| |
property IsAlias:Boolean read GetIsAlias write SetIsAlias;
|
|
property IsHighLatency:Boolean read GetIsHighLatency write SetIsHighLatency;
|
|
property IsMicrosoft:Boolean read GetIsMicrosoft write SetIsMicrosoft;
|
|
property ReparseTag:LongWord read FReparseTag write FReparseTag;
|
|
property ReparseSize:Word read FReparseSize write FReparseSize;
|
|
property ReparseGUID:TGUID read FReparseGUID write FReparseGUID;
|
|
property Reparse:TNTFSReparse read FReparse;
|
|
function CreateReparse:Boolean;
|
|
function NewReparse(AReparseTag:LongWord):Boolean;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS symbolic link attribute
TNTFSSymbolicLinkAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
protected
| |
procedure SetDataSize(AValue:LongWord); override;
|
NTFS extended attribute information
TNTFSExtendedAttrInformationAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FPackedSize:Word;
|
Size of the packed Extended Attributes |
FFlagCount:Word;
|
Number of Extended Attributes with NEED_EA |
FUnpackedSize:LongWord;
|
Size of the unpacked Extended Attributes |
public
| |
property PackedSize:Word read FPackedSize write FPackedSize;
|
|
property FlagCount:Word read FFlagCount write FFlagCount;
|
|
property UnpackedSize:LongWord read FUnpackedSize write FUnpackedSize;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS extended attribute
TNTFSExtendedAttrAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
private
| |
FExtendeds:TNTFSExtendeds;
|
List of attributes of this attribute |
public
| |
property Extendeds:TNTFSExtendeds read FExtendeds;
|
|
function CreateExtended:TNTFSExtended;
|
|
function DestroyExtended(AExtended:TNTFSExtended):Boolean;
|
|
function NewExtended(const AName:String):TNTFSExtended;
|
|
function GetExtended(const AName:String):TNTFSExtended;
|
|
function RemoveExtended(AExtended:TNTFSExtended):Boolean;
|
|
function ExtendedCount:LongWord;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadExtendeds(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteExtendeds(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function ReadData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteData(ABuffer:Pointer; var AOffset:LongWord; AVersion:Word):Boolean; override;
|
NTFS property set attribute
TNTFSPropertySetAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
protected
| |
procedure SetDataSize(AValue:LongWord); override;
|
NTFS logged utility stream attribute
TNTFSLoggedUtilityStreamAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
protected
| |
procedure SetDataSize(AValue:LongWord); override;
|
NTFS end attribute
TNTFSEndAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
public
| |
function CalculatedSize(AVersion:Word):LongWord; override;
|
|
function CalculatedDataSize(AVersion:Word):LongWord; override;
|
|
function CalculatedStreamSize(AVersion:Word):Int64; override;
|
|
function ReadAttribute(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteAttribute(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
NTFS unknown attribute
TNTFSUnknownAttribute = class(TNTFSDiskAttribute)
constructor Create(ALocalLock:TMutexHandle; AParent:TNTFSDiskRecord);
|
|
destructor Destroy; override;
|
|
protected
| |
procedure SetDataSize(AValue:LongWord); override;
|
NTFS object Id
TNTFSObjId = class(TObject)
Note: Data of index $O in file $ObjId (Not Used) | |
private
| |
public
| |
NTFS quota
TNTFSQuota = class(TObject)
Note: Data of index $Q in file $Quota (Not Used) | |
private
| |
public
| |
NTFS owner
TNTFSOwner = class(TObject)
Note: Data of index $O in file $Quota (Not Used) | |
private
| |
public
| |
NTFS upper case
TNTFSUpCase = class(TObject)
Note: Data of file $UpCase | |
constructor Create;
|
|
destructor Destroy; override;
|
|
private
| |
FLock:TSynchronizerHandle;
|
|
FData:Pointer;
|
|
function ReaderLock:Boolean;
|
|
function ReaderUnlock:Boolean;
|
|
function WriterLock:Boolean;
|
|
function WriterUnlock:Boolean;
|
|
public
| |
property Data:Pointer read FData;
|
|
function Init(AVersion:Word):Boolean;
|
|
function Convert(ASource,ADest:Pointer; ASize:LongWord):Boolean;
|
|
function ReadUpCase(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteUpCase(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS attribute definitions
TNTFSAttrDefs = class(TFileSysList)
constructor Create;
|
|
destructor Destroy; override;
|
|
private
| |
FAttrDefLocal:TMutexHandle;
|
|
function GetPrevious(AAttrDef:TNTFSAttrDef):TNTFSAttrDef;
|
|
public
| |
function CreateAttrDef(AType:LongWord; AVersion:Word; ANew:Boolean):TNTFSAttrDef;
|
|
function DestroyAttrDef(AAttrDef:TNTFSAttrDef):Boolean;
|
|
function NewAttrDef(AType:LongWord; const AName:String; AVersion:Word):TNTFSAttrDef;
|
|
function GetAttrDef(AType:LongWord; const AName:String):TNTFSAttrDef;
|
|
function GetAttrDefByIndex(AIndex:Integer; AVersion:Word):TNTFSAttrDef;
|
|
function GetAttrDefByIndexEx(AIndex:Integer; AVersion:Word; AWrite:Boolean):TNTFSAttrDef;
|
|
function GetAttrDefByAttribute(AAttribute:TNTFSDiskAttribute):TNTFSAttrDef;
|
|
function RemoveAttrDef(AAttrDef:TNTFSAttrDef):Boolean;
|
|
function CheckSize(AAttribute:TNTFSDiskAttribute;const ASize:Int64):Boolean;
|
|
function CheckIndexed(AAttribute:TNTFSDiskAttribute):Boolean;
|
|
function CheckResident(AAttribute:TNTFSDiskAttribute):Boolean;
|
|
function CheckUncompressed(AAttribute:TNTFSDiskAttribute):Boolean;
|
|
function TotalSize:Int64;
|
|
function AttrDefCount:LongWord;
|
|
function Init(AVersion:Word):Boolean;
|
|
function ReadAttrDefs(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteAttrDefs(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS attribute definition
TNTFSAttrDef = class(TListObject)
Note: Data of file $AttrDef | |
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
FAttributeName:String;
|
Label in Unicode |
FAttributeType:LongWord;
|
Type |
FDisplayRule:LongWord;
|
Display rule |
FCollateRule:LongWord;
|
Collation rule |
FAttrDefFlags:LongWord;
|
Flags (See Consts) |
FMinimumSize:Int64;
|
Minimum size |
FMaximumSize:Int64;
|
Maximum size |
FAttributeHash:LongWord;
|
|
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function GetAttributeName:String;
|
|
procedure SetAttributeName(const AAttributeName:String);
|
|
function GetIsIndexed:Boolean;
|
|
function GetIsResident:Boolean;
|
|
function GetIsUncompressed:Boolean;
|
|
function Compare(AAttrDef:TNTFSAttrDef):Integer; virtual;
|
|
public
| |
property AttributeName:String read GetAttributeName write SetAttributeName;
|
|
property AttributeType:LongWord read FAttributeType write FAttributeType;
|
|
property DisplayRule:LongWord read FDisplayRule write FDisplayRule;
|
|
property CollateRule:LongWord read FCollateRule write FCollateRule;
|
|
property AttrDefFlags:LongWord read FAttrDefFlags write FAttrDefFlags;
|
|
property MinimumSize:Int64 read FMinimumSize write FMinimumSize;
|
|
property MaximumSize:Int64 read FMaximumSize write FMaximumSize;
|
|
property IsIndexed:Boolean read GetIsIndexed;
|
|
property IsResident:Boolean read GetIsResident;
|
|
property IsUncompressed:Boolean read GetIsUncompressed;
|
|
function Init(AIndex:Integer;AVersion:Word):Boolean;
|
|
property AttributeHash:LongWord read FAttributeHash;
|
|
function ReadAttrDef(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteAttrDef(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS reparse
TNTFSReparse = class(TDiskReparse)
Note: Data of attribute $REPARSE_POINT | |
constructor Create(ALocalLock:TMutexHandle; AAttribute:TNTFSDiskAttribute);
|
|
destructor Destroy; override;
|
|
private
| |
FData:Pointer;
|
|
FDataSize:Word;
|
|
FAttribute:TNTFSDiskAttribute;
|
Attribute owning this index |
procedure SetData(AData:Pointer); virtual;
|
|
function GetDataSize:Word; virtual;
|
|
procedure SetDataSize(ASize:Word); virtual;
|
|
public
| |
property Data:Pointer read FData write SetData;
|
|
property DataSize:Word read GetDataSize write SetDataSize;
|
|
property Attribute:TNTFSDiskAttribute read FAttribute;
|
|
function CalculatedSize(AVersion:Word):Word; virtual;
|
|
function ReadReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;
|
|
function WriteReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; virtual;
|
NTFS reparse symbolic link
TNTFSReparseSymLink = class(TNTFSReparse)
Note: Data of attribute $REPARSE_POINT (Tag 0xA000000C) | |
constructor Create(ALocalLock:TMutexHandle; AAttribute:TNTFSDiskAttribute);
|
|
destructor Destroy; override;
|
|
private
| |
procedure SetData(AData:Pointer); override;
|
|
procedure SetDataSize(ASize:Word); override;
|
|
protected
| |
FPrintName:String;
|
Path Buffer |
FSubstituteName:String;
|
Path Buffer |
FPrintHash:LongWord;
|
|
FSubstituteHash:LongWord;
|
|
function GetTarget:String; override;
|
|
function GetPrintName:String;
|
|
procedure SetPrintName(const APrintName:String);
|
|
function GetSubstituteName:String;
|
|
procedure SetSubstituteName(const ASubstituteName:String);
|
|
public
| |
property PrintName:String read GetPrintName write SetPrintName;
|
|
property SubstituteName:String read GetSubstituteName write SetSubstituteName;
|
|
property PrintHash:LongWord read FPrintHash;
|
|
property SubstituteHash:LongWord read FSubstituteHash;
|
|
function PrintNameSize:Word; virtual;
|
|
function PrintNameOffset:Word; virtual;
|
Print Name Offset |
function PrintNameLength:Word; virtual;
|
Print Name Length |
function SubstituteNameSize:Word; virtual;
|
|
function SubstituteNameOffset:Word; virtual;
|
Substitute Name Offset |
function SubstituteNameLength:Word; virtual;
|
Substitute Name Length |
function CalculatedSize(AVersion:Word):Word; override;
|
|
function ReadReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
NTFS reparse mount point
TNTFSReparseMountPoint = class(TNTFSReparseSymLink)
Note: Data of attribute $REPARSE_POINT (Tag 0xA0000003) | |
constructor Create(ALocalLock:TMutexHandle; AAttribute:TNTFSDiskAttribute);
|
|
destructor Destroy; override;
|
|
public
| |
function PrintNameSize:Word; override;
|
|
function PrintNameOffset:Word; override;
|
Print Name Offset |
function PrintNameLength:Word; override;
|
Print Name Length |
function SubstituteNameSize:Word; override;
|
|
function SubstituteNameOffset:Word; override;
|
Substitute Name Offset |
function SubstituteNameLength:Word; override;
|
Substitute Name Length |
function CalculatedSize(AVersion:Word):Word; override;
|
|
function ReadReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
|
function WriteReparse(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean; override;
|
NTFS extendeds
TNTFSExtendeds = class(TFileSysListEx)
constructor Create(AExtendedLocal:TMutexHandle; ALock:TSynchronizerHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FExtendedLocal:TMutexHandle;
|
|
public
| |
function TotalSize:Int64;
|
|
function ExtendedCount:LongWord;
|
NTFS extended
TNTFSExtended = class(TListObject)
Note: Data of attribute $EA | |
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
FExtendedOffset:LongWord;
|
Offset to next Extended Attribute (Offset to next EA is the size of this EA) |
FExtendedFlags:Byte;
|
Flags |
FExtendedName:String;
|
Name Note: No offset so always in the same location (Not Unicode) |
FExtendedData:Pointer;
|
Value |
FExtendedDataSize:Word;
|
Value Length |
FExtendedHash:LongWord;
|
|
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function GetExtendedName:String;
|
|
procedure SetExtendedName(const AExtendedName:String);
|
|
procedure SetExtendedDataSize(ASize:Word);
|
|
public
| |
property ExtendedOffset:LongWord read FExtendedOffset write FExtendedOffset;
|
|
property ExtendedFlags:Byte read FExtendedFlags write FExtendedFlags;
|
|
property ExtendedName:String read GetExtendedName write SetExtendedName;
|
|
property ExtendedData:Pointer read FExtendedData;
|
|
property ExtendedDataSize:Word read FExtendedDataSize write SetExtendedDataSize;
|
|
property ExtendedHash:LongWord read FExtendedHash;
|
|
function ExtendedSize:LongWord;
|
|
function ExtendedNameSize:Word;
|
|
function ExtendedNameLength:Byte;
|
Name Length |
function ReadExtended(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteExtended(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS security items
TNTFSSecurityItems = class(TFileSysList)
constructor Create;
|
|
destructor Destroy; override;
|
|
private
| |
FSecurityLocal:TMutexHandle;
|
|
function GetPrevious(ASecurityItem:TNTFSSecurityItem):TNTFSSecurityItem;
|
|
public
| |
function CreateSecurityItem(ANew:Boolean):TNTFSSecurityItem;
|
|
function DestroySecurityItem(ASecurityItem:TNTFSSecurityItem):Boolean;
|
|
function NewSecurityItem(ASecurityId:LongWord; const ASecurityOffset:Int64; ASecurity:TNTFSSecurity):TNTFSSecurityItem;
|
|
function GetSecurityItem(ASecurityId:LongWord):TNTFSSecurityItem;
|
|
function GetSecurityItemEx(ASecurityId:LongWord; AWrite:Boolean):TNTFSSecurityItem;
|
|
function UpdateSecurityItem(ASecurityItem:TNTFSSecurityItem; ASecurityId:LongWord; ASecurity:TNTFSSecurity):Boolean;
|
|
function DeleteSecurityItem(ASecurityItem:TNTFSSecurityItem):Boolean;
|
|
function RemoveSecurityItem(ASecurityItem:TNTFSSecurityItem; AFree:Boolean):Boolean;
|
|
function TotalSize:Int64;
|
|
function SecurityItemCount:LongWord;
|
|
function Init(AVersion:Word):Boolean;
|
|
function ReadSecurityItems(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteSecurityItems(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS security item
TNTFSSecurityItem = class(TListObject)
Note: Data of stream $SDS in file $Secure | |
constructor Create(ALocalLock:TMutexHandle);
|
|
destructor Destroy; override;
|
|
private
| |
FLocalLock:TMutexHandle;
|
|
FSecurityHash:LongWord;
|
Hash of Security Descriptor |
FSecurityId:LongWord;
|
Security Id |
FSecurityOffset:Int64;
|
Offset of this entry in $SDS |
FSecuritySize:LongWord;
|
Size of this entry in $SDS |
FSecurity:TNTFSSecurity;
|
Self-relative Security Descriptor |
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
function Compare(ASecurityItem:TNTFSSecurityItem):Integer; virtual;
|
|
function CompareOld(ASecurityItem:TNTFSSecurityItem):Integer; virtual;
|
|
public
| |
property SecurityHash:LongWord read FSecurityHash write FSecurityHash;
|
|
property SecurityId:LongWord read FSecurityId write FSecurityId;
|
|
property SecurityOffset:Int64 read FSecurityOffset write FSecurityOffset;
|
|
property SecuritySize:LongWord read FSecuritySize write FSecuritySize;
|
|
property Security:TNTFSSecurity read FSecurity;
|
|
function CreateSecurity:Boolean;
|
|
function NewSecurity(ASecurity:TNTFSSecurity):Boolean;
|
|
function UpdateSecurity(ASecurity:TNTFSSecurity):Boolean;
|
|
function DeleteSecurity:Boolean;
|
|
function RemoveSecurity(AFree:Boolean):Boolean;
|
|
function MirrorOffset:Int64;
|
|
function Init(ASecurityId:LongWord; AVersion:Word):Boolean;
|
|
function ReadSecurityItem(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteSecurityItem(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
NTFS security
TNTFSSecurity = class(TDiskSecurity)
Note: Data of attribute $SECURITY_DESCRIPTOR and stream $SDS in file $Secure | |
Note: This is the same structure that is used for all security in Windows (File/Kernel/Registry etc). See TSecurityDescriptor and associated values in Security unit for more information. | |
constructor Create(ALocalLock:TMutexHandle);
|
|
constructor CreateFromSecurity(ALocalLock:TMutexHandle; ASecurity:TDiskSecurity); override;
|
|
constructor CreateFromDescriptor(ALocalLock:TMutexHandle; ADescriptor:Pointer); override;
|
|
destructor Destroy; override;
|
|
private
| |
FVolumeVersion:Word;
|
|
FRevision:Byte;
|
Revision |
FControl:Word;
|
Control Flags |
FSacl:PACL;
|
SACL |
FDacl:PACL;
|
DACL |
FOwner:PSID;
|
Owner SID |
FGroup:PSID;
|
Group SID |
procedure SetSacl(ASacl:PACL);
|
|
procedure SetDacl(ADacl:PACL);
|
|
procedure SetOwner(AOwner:PSID);
|
|
procedure SetGroup(AGroup:PSID);
|
|
procedure SetSaclSize(ASize:Word);
|
|
procedure SetDaclSize(ASize:Word);
|
|
procedure SetOwnerSize(ASize:Word);
|
|
procedure SetGroupSize(ASize:Word);
|
|
public
| |
property VolumeVersion:Word read FVolumeVersion;
|
|
property Revision:Byte read FRevision write FRevision;
|
|
property Control:Word read FControl write FControl;
|
|
property Sacl:PACL read FSacl write SetSacl;
|
|
property Dacl:PACL read FDacl write SetDacl;
|
|
property Owner:PSID read FOwner write SetOwner;
|
|
property Group:PSID read FGroup write SetGroup;
|
|
function SaclSize:Word;
|
|
function DaclSize:Word;
|
|
function OwnerSize:Word;
|
|
function GroupSize:Word;
|
|
function SaclOffset:LongWord;
|
Offset to SACL |
function DaclOffset:LongWord;
|
Offset to DACL |
function OwnerOffset:LongWord;
|
Offset to Owner SID |
function GroupOffset:LongWord;
|
Offset to Group SID |
function SaclOffsetEx(ALocal:Boolean):LongWord;
|
Offset to SACL |
function DaclOffsetEx(ALocal:Boolean):LongWord;
|
Offset to DACL |
function OwnerOffsetEx(ALocal:Boolean):LongWord;
|
Offset to Owner SID |
function GroupOffsetEx(ALocal:Boolean):LongWord;
|
Offset to Group SID |
function SecuritySize:LongWord; override;
|
|
function SecurityHash:LongWord;
|
|
function SecurityDescriptor:Pointer; override;
|
|
function SecurityDescriptorEx(ALocal:Boolean):Pointer; override;
|
|
function InheritedDescriptor:Pointer; override;
|
|
function MergedDescriptor(AChild:Pointer):Pointer; override;
|
|
function ReleaseDescriptor(ADescriptor:Pointer; AInherited,AMerged:Boolean):Boolean; override;
|
|
function CopyToSecurity(ASecurity:TDiskSecurity):Boolean; override;
|
|
function CopyToDescriptor(ADescriptor:Pointer; ASize:LongWord):Boolean; override;
|
|
function CopyToDescriptorEx(ADescriptor:Pointer; ASize:LongWord; ALocal:Boolean):Boolean; override;
|
|
function CopyFromDescriptor(ADescriptor:Pointer; ASize:LongWord):Boolean; override;
|
|
function ReadSecurity(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteSecurity(ABuffer:Pointer; var AOffset,ASize:LongWord; AVersion:Word):Boolean;
|
|
function WriteSecurityEx(ABuffer:Pointer; var AOffset,ASize:LongWord; ALocal:Boolean; AVersion:Word):Boolean;
|
NTFS security Id
TNTFSSecurityId = class(TObject)
Note: Data of index $SII in file $Secure (Not Used) | |
private
| |
public
| |
NTFS security hash
TNTFSSecurityHash = class(TObject)
Note: Data of index $SDH in file $Secure (Not Used) | |
private
| |
public
| |
Public variables
None defined
Function declarations
None defined
Return to Unit Reference