od Fantom007 20. 11. 2017 08:43
Jen úvodem - chci napsat software, který přiřadí k souborům na disku příslušnou oblast zabraných sektorů (setříděno podle sektorů), abych věděl, které soubory při vadných sektorech po testu disku a jeho opravě jsou nakopnuté. Pro soubory větší než 700 bytů používám FSCTL_GET_RETRIEVAL_POINTERS, ale menší jsou rezidentní přímo v MFT tabulce. Pomocí FSCTL_GET_NTFS_FILE_RECORD mohu vypsat/zkopírovat obsah souboru, ale spíš bych potřeboval vědět, kde daný FileRecord leží, když znám jeho Id (FileIndex z GetFileInformationByHandle). U prvního testovaného souboru to vychází: začátek MFT je na sektoru 0x600000, FileIndex * SektorsPerFileRecord = 0x4D * 2 = 0x9A, začátek file recordu je tedy na sektoru 0x60009A. Jenže u vyšších Id to neplatí: FileIndex = 124527, *2 = 249054 = 0x3CCDE. Očekával bych začátek File recordu na sektoru 0x63CCDE, jenže ten je až na 0x764B93E. Po dlouhém studiu NTFS vím, že MFT je nafukovací až do 65535 File recordů, a když to nestačí, stane se z této MTF bázová MFT, a pro nerezidentní záznam, který se tam už nevejde, je vytvořena další instance MFT. Bohužel jsem nezjistil způsob napojení jednotlivých MFT, jak je procházet, a zjistit, kde leží začátek File recordu v jiné než bázové MFT. Poradí někdo?