Assembler - язык неограниченных возможностей


Блочные устройства


Блочные устройства — это устройства, на которых DOS может организовать файловую систему. DOS не работает напрямую с дисками через BIOS, а только с драйверами блочных устройств, каждое из которых представляется системе как линейный массив секторов определенной длины (обычно 512 байт) с произвольным доступом (для BIOS, к примеру, диск — это четырехмерный массив секторов, дорожек, цилиндров и головок). Каждому загруженному устройству DOS присваивает один или несколько номеров логических дисков, которые соответствуют буквам, используемым для обращения к ним. Так, стандартный драйвер дисков получает буквы «А», «В», «С» и так далее, по числу видимых разделов на диске.

Рассмотрим атрибуты и команды, которые передаются блочным устройствам.

    Атрибуты:

    бит 15: 0 (признак блочного устройства)

    бит 14: поддерживаются IOCTL-чтение и запись

    бит 13: не требует копию первого сектора FAT, чтобы построить ВРВ

    бит 12: сетевой диск

    бит 11: поддерживает команды открыть/закрыть устройство и проверить, является ли устройство сменным

    биты 10 – 8: 000

    бит 7: поддерживается проверка поддержки IOCTL

    бит 6: поддерживается обобщенный IOCTL и команды установить и определить номер логического диска

    биты 5 – 2: 0000

    бит 1: поддерживаются 32-битные номера секторов

    бит 0: 0

Команды и структура переменной части буфера запроса для них (только то, что отличается от аналогичных структур для символьных устройств):

    00h: Инициализация

    +0Dh: байт — количество устройств, которые поддерживает драйвер

    +12h: 4 байта — дальний адрес массива ВРВ-структур (по одной для каждого устройства)

ВРВ — это 25-байтная структура (53 для FAT32), которая описывает блочное устройство. Ее можно найти по смещению 0Bh от начала нулевого сектора на любом диске: