Tohle nevypadá, že by bylo způsobené magickými hodnotami ( $MFT ani není magická hodnota, je to existující soubor), ale tím, že kdokoliv může zablokovat zápis do jakéhokoliv souboru, který má někdo jiný otevřený, pokud se ho bude pokoušet otevřít jako adresář. Použití na $MFT je jen taková třešnička, jak zablokovat celý souborový systém.
> kdokoliv může zablokovat zápis do jakéhokoliv souboru, který
> má někdo jiný otevřený, pokud se ho bude pokoušet otevřít
> jako adresář.
Můžete to trochu více rozvést?
Zkoušel jsem trochu jiný případ, konkrétně příkaz
echo abc > C:\$mft\x
Povedlo se asi na čtvrtý pokus a podle výpisu z debuggeru to vypadá na regulérní deadlock (čekání v kruhu délky 2) – dvě vlákna zamykají sekvenci dvou zámků v opačném pořadí (jeden ze zámků asi patří $mft). Samozřejmě se tam navěsila další vlákna čekající na $mft, ale u nich nevidím, že by čekala do kruhu či způsobovala deadlock nějakým jiným způsobem.
Jestli jsem dobře pochopil ten ruský text, tak by to mělo být nějak takto:
Pokud se snažíte otevřít soubor v adresáři, ovladač NTFS uzel domnělého adresáře zamkne, ověří, že je to adresář, a když není, odemkne a vrátí chybu. V té části odemykání je ale chyba, že pokud má ten uzel (soubor) otevřený i někdo jiný, tak to selže a ten uzel to neodemkne (zámek leakne). Jakýkoliv zápis pak deadlockne, protože čeká na zámek, který už nikdo neodemkne. U $MFT je to vylepšené o to, že jakákoliv alokace v jiném souboru se musí zapsat do $MFT.
Zkusil jsem to a nic.
Tak jsem to zkusil na W7pro a vypadalo to, že taky nic, ale za chvíli opravdu tuho.
Znovu W10 a nic (W10pro 1703 15063.296). Ještě jsem zkusil 1607 14393.1198 a taky nic.
Má to způsobit (v cmd) pouhé "cd c:\$mft\x" - a alespoň na těch W7 to zabralo.
Vypíše to, že "Systém nemůže nalézt uvedenou cestu" a problém nastane až za chvíli, asi až zkusím otevřít něco, co není nakešováno nebo tak něco.
Ja som to nielenze videl, ale programoval som v tom zlahka, kedze som potreboval gui .. je to uz sice uz pomaly 15 rokov, ale nasledky citim dodnes :D .. strhavam sa zo sna a pod. .. pozeral som si totiz aj co VS vygeneroval zdrojaky.
Na druhej strane, ked som prykrat videl C++ v linuxovom kerneli .. posobilo to na mna podobne :) C++ v dnesnej podobne je totalna zvratenost .
si to nainstaluj do virtualboxu
https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
Myslel jsem to spise ironicky. Binarnimu spiclovacimu blobu se snazim vyhybat. I kdyz uznavam, ze pro webove vyvojare se to muze hodit.
Kadozpadne koukam, ze tady ty virtualni verze Windows dosud nemaji variantu pro QEMU (ktere pouzivam) i kdyz MS slibil ~2 roky zpet ze behem par tydnu bude ( https://betanews.com/2015/08/18/microsoft-releases-free-windows-10-virtual-machines/ ).
Me zase par dnu zpet totalne dostalo kdyz mi znamy s plne aktualizovanymi Widlemi 10 napsal, ze
nemuze rozbalit zip archiv.
1.) Nejdriv mi poslal rar archiv, ze pry ho nemuze rozbalit.
2.) Poslal jsem mu dotycny archiv v zip formatu s tim, ze clovek co mu zasila rar je pocitacovy analfabet.
3.) Pote mi znamy rekl, ze mu ani zip nejde rozbalit (i kdyz jsem svym skriptem odstranil veskerou diakritiku v nazvech souboru)
4.) Vyslo z toho najevo, ze Windows 10 (s NTFS) limituje delku cesty na smesnych 260 znaku (od jakehosi Anniversary Updatu to lze v nastaveni zvysit: https://www.howtogeek.com/266621/how-to-make-windows-10-accept-file-paths-over-260-characters/). Linux ma defaultne dlouhodobe 4096.
5.) Provedl jsem extrakci archivu na USB flash disk s nejakym FAT systemem a zkopiroval jej do jeho Windli 10.
Krasna ukazka toho nakolik je Windows vhodny pro bezne uzivatele (a to aktualne verze 10 stoji ~2950 Kc).
Vytvářet archiv s takto dlouhými cestami podle mě nepatří zrovna mezi běžné činnosti. Kdyby ano, nadávalo by mnohem více lidí.
Krom ovladače souborového systému také záleží na vyšších vrstvách kódu, jak se k takto dlouhým cestám chovají. Teoretická hranice pro délku cesty je 32767 znaků, ale jak u některých funkcí Windows API, tak u mnoha aplikací, se setkáte s omezením délky cesty na konstantu MAX_PATH (260 znaků). Tzn. i kdyby práci s takovým archivem NTFS podporovalo správně, aplikace třetích stran mohou mít problémy.
Ne že by nešlo pracovat i s potenciálně nekonečnými cestami, ale pak je třeba se odkazovat hodně relativně (ne přes "." a "..", ale otevírat soubory relativně k jiným). I tady ale vznikají některé problémy (SeChangeNotifyPrivilege).
Situace se na různých frotnách postupně zlepšuje (alespň u těch systémových věcí), ale ještě to nějakou dobu asi potrvá :-). Alespoň, že už Průzkumník konečně podporuje Unicode.
Ty cesty sou M$ tradice ... a prdel je predevsim to, ze oni ani neumej zabranit tomu, abys neudelal delsi. Vyzkousej si to, proste udelej 250 znakovou strukturu, a pak treba topovej folder prejmenuj a prodluz ... vpohode to projde, ale kdyz to pak zkusis smazat ... tak smolik, to uz nejde.
Tohle ti pak udela uplne vpohode libovolnej BFU ... a je v prd.lni dire, protoze naprosto netusi co s tim.
Specielni zabava pak nasleduje, kdyz se nekdo pokousi neco takovyho otevrit v M$ opicich ... jiny appky ti proste vynadaj ze to nejde, opice se (v zavislosti na verzi) zhroutej, vytuhnou ... zrejme slusnej oddil ... ten M$.