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


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


Для всех остальных команд в поле буфера запроса со смещением +1 размещается номер логического устройства из числа обслуживаемых драйвером, к которому относится команда:

    01h: Проверка носителя

    +0Dh: байт

    на входе — описатель носителя

    на выходе

    0FFh — если диск был сменен

    01h — если диск не был сменен

    00h — если это нельзя определить

+0Fh: 4 байта — адрес ASCIZ-строки с меткой диска (если установлен бит 11 в атрибуте)

02h: Построить ВРВ

    +0Dh: описатель носителя

    +0Eh: 4 байта

    на входе — дальний адрес копии первого сектора FAT

    на выходе — дальний адрес ВРВ

03h: IOCTL-чтение (если установлен бит 14 атрибута)

04h: Чтение из устройства

    +0Dh: байт — описатель носителя

    +12h: 2 байта

    на входе — число секторов, которые надо прочитать

    на выходе — число прочитанных секторов

+16h: 2 байта — первый сектор (если больше 65 535 — здесь FFFFh)

+18h: 4 байта — на выходе — адрес метки диска, если произошла ошибка 0Fh

+1Ch: 4 байта — первый сектор

08h: Запись в устройство. Структура буфера аналогична 04h с точностью до замены чтения на запись

09h: Запись в устройство с проверкой. Аналогично 08h

0Ch: IOCTL-запись (если установлен бит 14 атрибута)

0Dh: Открыть устройство (если установлен бит 11 атрибута)

0Eh: Закрыть устройство (если установлен бит 11 атрибута)

0Fh: Проверка наличия сменного диска (если установлен бит 11 атрибута). Драйвер должен установить бит 9 слова состояния, если диск сменный, и сбросить, если нет.

13h: Обобщенный IOCTL (если установлен бит 6 атрибута)

    +0Dh: байт — категория устройства:

    08h: дисковое устройство

    48h: дисковое устройство с FAT32

+0Eh: код подфункции: