Спеціальні файли ntfs

Перші шістнадцять елементів головної таблиці файлів (MFT - Master File Table) зарезервовані для спеціальних файлів. В NTFS 3.0 використовуються тільки перші дванадцять елементів. Це приховані файли, імена яких розташовані в корені розділу. Файлів не видно, але, тим не менш, вони існують. Перевірити це можна, спробувавши створити файл з одним із зарезервованих імен в корені розділу. На диску з NTFS, наприклад, не вийде створити файл C: \ $ Volume.

  • $ MFT (елемент 0) Головна таблиця файлів. Атрибут даних містить елементи MFT, а також не використовуються растрові атрибути.
  • $ MFTMirr (елемент 1) Дзеркало (резервна копія) перших чотирьох елементів MFT.
  • $ LogFile (елемент 2) Файл журналу томи, в який записуються всі зміни структури томи.
  • $ Volume (елемент 3) Атрибут даних $ Volume представляє весь тому. Звернення Win32 на ім'я «\\. \ C:» відкриє файл томи на диску С: (передбачається, що диск С: є томом NTFS), Файл $ Volume містить також ім'я томи, інформацію про томі і атрибути ідентифікатора об'єкта.
  • $ AttrDef (елемент 4) Атрибут даних $ AttrDef містить масив визначень атрибута.
  • \ (Елемент 5) Кореневий каталог томи.
  • $ Bitmap (елемент 6) Атрибут даних $ Bitmap представляє собою растр кластерів томи.
  • $ Boot (елемент 7) Перший сектор $ Boot є також і першим сектором томи. Оскільки він використовується на самому початку процесу завантаження системи (якщо те є завантажуваних), то простір тут не нормується, а збережені дані не вирівнюються по природним кордонів. Формат першого сектора можна описати за допомогою структури BOOT_BLOCK.
  • $ BadClus (елемент 8) В атрибуті даних цього файлу міститься інформація про збійних кластерах.
  • $ Secure (елемент 9) Атрибут даних $ Secure містить спільно використовувані ідентифікатори доступу. $ Secure містить також два індексу.
  • $ UpCase (елемент 10) Атрибут даних $ Upcase містить еквівалент верхнього регістру всіх 65536 символів Unicode.
  • $ Extend (елемент 11) $ Extend - це каталог, який містить спеціальні файли, які використовуються деякими додатковими функціями NTFS 3.0. Спеціальні файли, що зберігаються в цих каталозі, це: «$ ObjId» (підтримка об'єктних ідентифікаторів), «$ Quota» (підтримка квот), «$ Reparse» (дані точок повторної обробки) і «$ UsnJrnl» (журнал файлової системи). Починаючи з Windows Vista тут також знаходиться каталог «$ RmMetadata» (підтримка транзакцій NTFS).

Хоч спеціальні файли і є насправді файлами, але відкрити їх звичайним способом (наприклад за допомогою функцій NtOpenFile або NtCreateFile) не можна. Навіть отримавши в ACL права адміністратора (дозволяють читання спеціальних файлів), доступ до них виявляється неможливий, оскільки для них ntfs.sys (драйвер файлової системи NTFS) завжди повертає статус помилки STATUS_ACCESS_DENIED. У ntfs.sys існують дві змінні, які впливають на його поведінку: NtfsProtectSystemFiles і NtfsProtectSystemAttributes. За замовчуванням, значенням обох цих змінних є TRUE.

Якщо змінної NtfsProtectSystemAttributes привласнити значення FALSE (наприклад за допомогою відладчика), то, використовуючи імена в форматі «filename :: $ STANDARD_INFORMATION», можна отримати доступ до атрибутів системи (зокрема до стандартних інформаційних атрибутів). Якщо привласнити значення FALSE змінної NtfsProtectSystemFiles, то можна буде відкрити спеціальні файли. Але при спробі зробити це можна зіткнутися і з деякими труднощами, пов'язаними з тим, що багато хто з спеціальних файлів виявляються вже відкриті системними засобами при ініціалізації томи, а крім того, вони не пристосовані для обробки запиту IRP_MJ_READ, що виникає при виклику функцій NtReadFile, і якщо такий запит надійде, то система дасть збій. Спеціальні файли можна прочитати, зробивши за допомогою функцій NtCreateSection і NtMapViewOfSection їх копії і прочитавши дані з них.

Наступна проблема полягає в тому, що деякі із спеціальних файлів нездатні обробляти запит IRP_MJ_CLEANUP, який надсилатиметься закривається останній дескриптор об'єкта файлу. Якщо такий запит буде отриманий, то станеться збій системи. Таким чином, необхідний як мінімум один відкритий дескриптор спеціального файлу, що належить процесу, який ніколи не завершиться (наприклад системного процесу).

По темі NTFS також є наступне: