Je to soubor, kerej obsahuje hlavičky všech souború včetně sebe. Obvykle zabírá 1/8 disku.
Ofset | Velikost | Význam |
---|---|---|
13 | 1 | Velikost klastru v sektorech (sektor = 512 B) |
48 | 8 | Číslo klastru MFT |
56 | 8 | Číslo klastru MFTMirr (záloha prvních 4 souború) |
64 | 1 | Velikost MFT záznamu v bajtech (-N = 2N) (0F6h = 1024) |
Číslo | Název |
---|---|
0 | $MFT |
1 | $MFTMirr |
2 | $LogFile |
3 | $Volume |
4 | $AttrDef |
5 | . (Root Directory) |
6 | $BitMap |
7 | $Boot |
8 | $BadClus |
9 | $Secure |
10 | $UpCase |
11 | $Extend |
12-23 | $ObjId |
12-23 | $Quota |
12-23 | $Reparse |
12-23 | $UsnJrnl |
FileDescriptor | Atribut1 | Atribut2 | Atribut3 | ... | 0xFFFFFFFF | ... |
1024 |
Každej sektor v MFT končí dvoubajtovym číslem update sequence. V 1024 bajtovym záznamu to sou 2 položky. Data, kerý byly na těhle pozicích púvodně, se ukládají do update_seq_array.
Atributy se dělej na rezidentní a nerezidentní. Rezidentní sou celý v MFT záznamu, nerezidentní obsahujou takzvanej DataRun, kerej odkazuje do datový části disku. Rezidentní atributy začínaj strukturou StandardHeader.
struct StandardHeader{Číslo | Význam |
---|---|
10h | STANDARD INFORMATION |
20h | ATTRIBUTE LIST |
30h | FILE NAME |
40h | OBJECT ID |
50h | SECURITY DESCRIPTOR |
60h | VOLUME NAME |
70h | VOLUME INFORMATION |
80h | DATA |
90h | INDEX ROOT |
0A0h | INDEX ALLOCATION |
0B0h | INDEX BITMAP |
0C0h | REPARSE POINT |
0D0h | EA INFORMATION |
0E0h | EA |
0F0h | PROPERTY SET |
100h | LOGGED UTILITY STREAM |
U nerezidentních atributú.
VCN (Virtual Cluster Number) = číslo klastru v souboru.
LCN (Logical Cluster Number) = číslo klastru na disku.
Ofset | Velikost | Význam |
---|---|---|
0 | 1 | sizes (& 0Fh = počet bajtú count, >> 4 = počet bajtú base, 00 = konec) |
1 | sizes & 0Fh | count (počet klastrú) |
1 + sizes & 0Fh | sizes >> 4 | base (klastr začátku, se znamínkem, relativní k předchozímu) |
Příklad (hex):
31
02 56 34 12
11 04 24
11
06 F0
00
1. datarun: count = 2, base = 0 + 123456h
2. datarun: count = 4, base = 123456h + 24h = 12347Ah
3. datarun: count = 6, base = 12347Ah + 0F0h = 12347Ah - 10h = 12346Ah
Obsahuje tyhle atributy:
10h - STANDARD INFORMATION
30h - FILE NAME (pro každej hardlink)
50h - SECURITY DESCRIPTOR (přístupový práva)
80h - DATA (obsah souboru - rezidentní nebo nerezidentní)
struct StandardInformation{
// +StandardHeader
DateTime created
DateTime modified
DateTime mft_modified
DateTime accessed
uns4 permissions
uns4 max_versions // 0 - not limited
uns4 version
}
struct FileNameAtr{
// +StandardHeader
uns8 parent_dir
DateTime created
DateTime modified
DateTime mft_modified
DateTime accessed
uns8 allocated
uns8 size
uns4 flags // 1 read only, 2 hidden, 4 system, 20h arch, 40h dev,
100h tmp, 200h sparse, 400h reparse, 10000000h dir
uns4 ea_reparse
uns1 name_len
uns1 namespace
uns2 name[256]
}
Méno souboru je v UTF-16 LE.
Namespace: 0 posix, 1 win, 2 dos, 3 dos & win
Obsahuje tyhle atributy:
10h - STANDARD INFORMATION
30h - FILE NAME
50h - SECURITY DESCRIPTOR
90h - INDEX ROOT
Pokud je nastaven flag large:
0A0h - INDEX ALLOCATION - nerezidentní
0B0h - INDEX BITMAP
Ména atributú (ne souboru) sou "$I30" (UTF-16 LE)
Pokud se IndexEntry nevejdou do MFT záznamu, nastaví se flag large
a IndexRoot obsahuje pouze jeden IndexEntry, jehož subnode odkazuje na
VCN kořenovýho uzlu (root node).
StandardIndexHeader (18h) | NodeHeader (10h) | Fixup (18h) | IndexEntry1 | IndexEntry2 | IndexEntry3 | ... |
4096 |
Číslo subnode je VCN do INDEX ALLOCATION.
Subnode obsahuje ty uzly, kerý sou menší než aktuální uzel, kromě posledního.
Fixup je to samý jako update_sequence. Velikost uzlu je 4096 (8 sektorú) a 1
číslo update sequence, takže potřebujeme 9 * 2 B, zbytek je zarovnání na 8 B.
Najdi první klíč, kerej je věčí než novej. Přidej novej před něj.
1: Pokud je uzel plnej: rozděl ho na dva, najdi medián(prostřední klíč), ten přidej
do rodiče. goto 1
Add a node (en)
Smaž klíč
Pokud měl potomka: Najdi nejvěčího potomka a přesuň ho sem.
To samý pro uzel nejvěčího potomka.
2: Pokud uzel není dostatečně zaplněnej:
Pokud sourozenec má dostatek klíčú, ukradni jeden, jinak spoj se sourozencem.
goto 2