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
.