
- •Системне програмування
- •1. Головний завантажувальний запис диску Master Boot Record.
- •2. Таблиця розділів та логічні диски
- •3. Таблиця розміщення файлів (fat). Загальна схема використання fat
- •4. Файлова система iso9660.
- •5. Файлова система udf
- •6. Таблиця відкритих файлів (sft). Стандартні файлові маніпулятори та їх розташування в sft.
- •7. Таблиця файлів завдань jft та її зв’язок з таблицею відкритих файлів sft.
- •9. Файлова система ntfs
- •10. Використання api функцій для роботи з файлами
- •11. Методи налагоджування драйверів та механізм підготовки їх до виконання
- •12. Команда ініціалізації драйверу. Її зміст, призначення та місце розташування. Визначення адреси точки розриву.
- •13. Об’єкти і їх дескриптори в Windows
- •14. Процедура переривання драйвера, її функція. Таблиця переходів
- •16. Загальний зв’язний список драйверів. Правила для встановлення нового драйверу.
- •19. Процедура стратегії драйвера та її основна задача.
- •20. Заголовок запиту драйверу, його складові частини та їх призначення
- •22.Обслуговування пам’яті в dos
- •23. Буфер попередньої трансляції в сторінковій організації пам’яті
- •Привілеї сегмента задаються полем dpl байта управління доступом.
- •26.Глобальні, локальні таблиці дескрипторів та idt.
- •27. Перетворення логічної адреси на лінійну в реальному та захищеному режимах
- •29.Таблиця дескрипторів переривань (idt).
9. Файлова система ntfs
Розділ NTFS, теоретично, може бути майже якого завгодно розміру. Межа, звичайно, є, але я навіть не буду вказувати його, так як його із запасом вистачить на наступні сто років розвитку обчислювальної техніки - за будь-яких темпах зростання. Як справи з цим справу на практиці? Майже так само. Максимальний розмір розділу NTFS в даний момент обмежений лише розмірами жорстких дисків. NT4, правда, буде відчувати проблеми при спробі установки на розділ, якщо хоч якась його частина відступає більш ніж на 8 Гб від фізичного початку диска, але ця проблема стосується лише завантажувального розділу.
Ліричний відступ. Метод інсталяції NT4.0 на порожній диск досить оригінальний і може навести на неправильні думки про можливості NTFS. Якщо ви вкажете програмі установки, що бажаєте відформатувати диск в NTFS, максимальний розмір, який вона вам запропонує, буде всього 4 Гб. Чому так мало, якщо розмір розділу NTFS насправді практично необмежений? Справа в тому, що установча секція просто не знає цієї файлової системи :) Програма установки форматує цей диск у звичайний FAT, максимальний розмір якого в NT становить 4 Гбайт (з використанням не зовсім стандартного величезного кластеру 64 Кбайта), і на цей FAT встановлює NT. А от уже в процесі першого завантаження самої операційної системи (ще в настановної фазі) проводиться швидке перетворення розділу в NTFS; так що користувач нічого і не помічає, крім дивного "обмеження" на розмір NTFS при установці.:)
Структура розділу - загальний погляд
Як і будь-яка інша система, NTFS ділить все корисне місце на кластери - блоки даних, використовувані одноразово. NTFS підтримує майже будь-які розміри кластерів - від 512 байт до 64 Кбайт, якимсь стандартом ж вважається кластер розміром 4 Кбайт. Ніяких аномалій кластерної структури NTFS не має, тому на цю, загалом-то, досить банальну тему, сказати особливо нічого.
Диск NTFS умовно ділиться на дві частини. Перші 12% диску відводяться під так звану MFT зону - простір, у яке росте метафайл MFT (про це нижче). Запис будь-яких даних в цю область неможлива. MFT-зона завжди тримається порожньою - це робиться для того, щоб найголовніший, службовий файл (MFT) не фрагментирован при своєму зростанні. Решта 88% диску є звичайне простір для зберігання файлів.
Вільне місце диска, проте, включає в себе всі фізично вільне місце - незаповнені шматки MFT-зони туди теж включаються. Механізм використання MFT-зони такий: коли файли вже не можна записувати в звичайний простір, MFT-зона просто скорочується (в поточних версіях операційних систем рівно в два рази), звільняючи таким чином місце для запису файлів. При звільненні місця у звичайній області MFT зона може знову розшириться. При цьому не виключена ситуація, коли в цій зоні залишилися і звичайні файли: ніякої аномалії тут немає. Що ж, система намагалася залишити її вільною, але нічого не вийшло. Життя триває... Метафайл MFT-таки може фрагментуватися, хоч це і було б небажано.
10. Використання api функцій для роботи з файлами
Win32 API (розшифровується як інтерфейс прикладних програм) - це множина підпрограм-функцій, на яких побудована операційна система WINDOWS, яка використовує 32х-бітну адресацію, починаючи з WINDOWS 95 і закінчуючи WINDOWS XP. Розробники WINDOWS зробили багато зусиль щоб стандартизувати як назви функцій, так і їх параметри. Тому використовувати їх не так важко, якщо засвоїти деякі загальні концепції. Суть функцій API зрозуміти значно легше, якщо уявити, з яких файлів вони викликаються і на які групи ці функції поділяються. Асемблер - це як раз той зручний і простий засіб, який дозволить вам звертатись безпосередньо до будь-якої функції API, що знаходиться у DLL-файлі.
Основні функції Win32 API використовувані для роботи з файлами і каталогами:
CreateFile – создание или открытие файла
DeleteFile – удаление файла
CloseHandle – закрытие файла
ReadFile – чтение из файла
WriteFile – запись в файл
LockFile – блокировка файла
UnlockFile – разблокировка файла
FindFirstFile – поиск первого файла по заданному имени или маске
FindNextFile – поиск каждого последующего файла по заданной маске
FindClose – завершение поиска
SetFilePointer – установка указателя в файле
CreateDirectory – создание каталога
RemoveDirectory – удаление пустого каталога
Примітка:
• видалення каталогу, оскільки функція RemoveDirectory видаляє лише порожні каталоги. Реалізувати функцію видалення будь-яких каталогів з використанням рекурсії або стеків на основі функцій RemoveDirectory, FindFirstFile, FindNextFile, FindClose і DeleteFile;
• При створенні проекту необхідно використовувати бібліотеку kernel32.lib;
• у вихідному файлі підключати заголовні файли: (include "windows.h", "winbase.h").
Довідкова інформація по функціях API, що використані в роботі
CopyFileA - копіює файл LpExistingFileName // вказівник на ім'я файлу, що копіюється; LpNewFileName // вказівник на ім'я файлу-копії BOOL bFailIfExists // якщо значення - ненульове, то в разі існування файлу-копії, функція не виконується; якщо значення - нульове - файл перезаписується.
DeleteFileA - знищує заданий файл LPCTSTR lpFileName // вказівник на ім'я файлу, який знищується. GetFileAttributesA -отримує атрибути заданого файлу або каталогу LPCTSTR lpFileName // адреса імені файлу або каталогу; В результаті регістр EAX буде містити побітну інформацію про атрибути файла. Нижче наведений перелік номерів бітів і атрибутів, що їм відповідають: 0 – READONLY файл (каталог) тільки для читання; 1 – HIDDEN файл (каталог) є прихованим; 2 – SYSTEM файл (каталог) виключно використовується операційною системою; 4 – DIRECTORY "файл або каталог" є каталогом; 5 – ARCHIVE файл (каталог) є архівним. Автоматично встановлюється, якщо файл (каталог) переносився; 7 – NORMAL файл (каталог) немає інших атрибутів; 8 – TEMPORARY файл для тимчасового зберігання даних, знищується після виконання програми,яка його створює; 11 – COMPRESSED файл (каталог) є стиснутим; 12 – OFFLINE дані у файлі тимчасово є недоступними. GetLocalTime - заповнює структуру lpSystemTime значенням місцевого часу та дати LpSystemTime // адреса структури системного часу, яка буде заповнена (див. текст програми);
GetLogicalDrives - отримує інформацію про логічні диски, наявні в системі (0-й біт в регістрі EAX - диск A, 1-й - диск B і т.д.) GetLogicalDriveStringsA - отримує інформацію про шляхи до кореневих каталогів логічних дисків, наявних в системі DWORD nBufferLength // довжина буферу; LPTSTR lpBuffer // адреса буферу для рядка імен логічних дисків, розділених символами нуля. Ім’я останнього диску закінчується двома нулями. GetSystemTime - заповнює структуру lpSystemTime значенням поточного часу за Грінвичем (див. також функцію GetLocalTime).
GetTempFileNameA - отримує ім'я тимчасового файлу для використання програмою-ужитком LPCTSTR lpPathName // адреса імені каталогу для тимчасового файлу; LPCTSTR lpPrefixString // адреса префіксу імені тимчасового файлу; UINT uUnique // число, яке з'єднується з префіксом для створення імені тимчасового файлу (0-випадкове число); LPTSTR lpTempFileName // адреса буферу для імені тимчасового файлу. RemoveDirectoryA -знищує заданий каталог LPCTSTR lpPathName // адреса каталогу, який знищується.
SetCurrentDirectoryA - встановлює поточний каталог LPCTSTR lpPathName // адреса імені нового поточного каталогу.
SetFileAttributesA - встановлює атрибути файлу (див. функцію GetFileAttributesA) LPCTSTR lpFileName // адреса імені файлу; DWORD dwFileAttributes // 32х-бітна константа, що задає атрибути файлу. SetVolumeLabelA - встановлює мітку тому для диску LPCTSTR lpRootPathName // адреса імені кореневого каталогу; LPCTSTR lpVolumeName // адреса імені мітки.