Živě.cz

Přihlásit se




Hodně fragmentovaný soubor a FSCTL_GET_RETRIEVAL_POINTERS

Offline - Junior Profil 
5. 12. 2017 15:04 Odeslat příspěvek
Pokud má soubor více než 31 fragmentů, vrací funkce DeviceIoControl(handle,FSCTL_GET_RETRIEVAL_POINTERS ...) chybový kód ERROR_MORE_DATA (mohu vypsat jen těchto prvních 31 fragmentů). Pokud použiju DeviceIoControl(hDrive,FSCTL_GET_NTFS_FILE_RECORD ...), vidím v atributu DATA všechny fragmenty v částech DataRun. S hodnotou ClusterCount není problém. Hodnotu FirstCluster získám tak, že k předchozí hodnotě FirstCluster přičtu hodnotu FirstCluster načtenou z aktuální DataRun. Funguje to, ovšem jen do určité meze (nad ní jsou u mne hodnoty v rozsahu 0x4CA4126 až 53CA47E). Pokud od této hodnoty za limitem odečtu přesně 0x1000000 (např. 0x4CA4126-0x1000000=0x3CA4126), vše přesně sedí a mohu pokračovat dále. Divné, ale funguje mi to. Až na jednu výjimku - 0x4459D96 - zde musím odečíst 0x10000, abych dostal 0x4449D96. Záhada.
Já si mohu diskový oddíl defragmentovat, ale chtěl bych být schopen tento problém vyřešit kvůli jiným diskům, které defragmentované být nemusí (píšu program vypisující soubory, které leží na vadných sektorech disku). Problém je to dost speciální, ale např. defragmentační programy si s ním musí určitě poradit. Problém není v mém programu, ale obecně, v programu Active@DiskEditor to vidím stejně divně. Takový špek asi nikdo znát nebude, ale co kdyby náhodou?
Poslední příspěvek


Offline - Moderátor Profil 
6. 12. 2017 15:02 Odeslat příspěvek
Původně jsem chtěl napsat jedno přísloví z červeného trpaslíka: "Jedno staré kočičí přísloví říká: co to sakra meleš ty vořechu?"
Ale co se tak dívám na microsoftí web: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364572(v=vs.85).aspx a na chybu "ERROR_MORE_DATA" tak by mělo stačit jen funkci zavolat s větším bufferem, kam se vejdou i ty další data. Nebo to jsi už zkoušel?


Offline - Junior Profil 
7. 12. 2017 07:43 Odeslat příspěvek
Jak prosté, milý Watsone! Skutečně pouhé zvětšení jediného čísla (velikosti bufferu) můj problém vyřešilo. Že mě to nenapadlo? A já bláhový si myslel, že se jedná o systémové omezení FSCTL_GET_RETRIEVAL_POINTERS, podobně jako u malých souborů umístěných residentně přímo v MFT. Děláš mi radost chlapče, jen neusnout na vavřínech (pouhý eufemismus, nic jiného to neznamená). Tisíceré díky. Zjišťuji svoji multikulturní zaostalost ohledně Červeného trpaslíka a zvažuji doplnění této mezery ve vzdělání (moc hezká hláška, musím si ji zapamatovat).

Jsem rád, že se nemusím patlat ve výše uvedených záhadách fragmentovaných souborů pomocí metody FSCTL_GET_NTFS_FILE_RECORD. Už to nepotřebuji, ale pokud by někdo čistě ze studijních důvodů znal odpověď, nechť se nebojí ji napsat.
Nahoru

Odeslat nové téma  Odeslat odpověď

Stránka 1 z 1 [ Příspěvků: 3 ]
Předchozí téma | Následující téma
Verze pro tisk


Hledat
Přeskočit na
 

Hledat

Zobrazit v normálním vzhledu