|
|
|
|
"Список списков"
DOS записывает адреса системных таблиц как описателей так и FCB в структуру данных, известную как "список списков". Эта структура данных
содержит и другую важную информацию. Вашему TSR может понадобиться просмотреть содержимое этого списка или некоторые структуры данных, на которые он
указывает. Недокументированная функция AH=52h прерывания int 21h возвращает адрес списка списков в паре регистров ES:BX. Фрагмент программы,
приведенной на листинге 4-11 показывает, как найти этот список.
Листинг 4-11. Поиск списка списков
----------------------------------------------------------------
ListAddr DW 0,0
mov ah,52h ; запрос DOS, где он размешен
int 21h ; (недокументированная функция)
mov ListAddr,bx ; адрес возвращается в ex:bx
mov ListAddr+2,es
----------------------------------------------------------------
|
Короче говоря, имеются вполне определенные функции для разных входов в список списков. Блочное устройство (обычно диск) записывает информацию о
структуре файловой системы в блок управления устройством (DCB). Данные DCB обычно включают размер диска, количество входов в корневой директорий,
количество FAT и т.д. DOS записывает адрес системных часов в качестве оптимизатора производительности. Вдобавок к обработке запросов о времени и дате,
DOS записывает временные метки при каждой записи FCB и затем записывает время самого последнего обращения к записи описателя. DOS использует
сохраненный адрес клавиатуры для проверки сигнала break и для сообщения об ошибках "деление на нуль". DOS предполагает, что клавиатура имеет ISR int
1Bh, так что ISR клавиатуры может обрабатывать break немедленно. Для операций над блочными устройствами DOS использует текущий директорий. DOS
поддерживает список используемых кэш-блоков для обработки запросов на чтение/запись отдельных блоков и для обращения к блокам директория и FAT.
Длина каждого кэш-блока указана в DOS_W_MaxSector. Заголовками для таблиц описателей и FCB файловой системы являются, соответственно, DOS_D_HDLSFT и
DOS_D_FCBSFT. Листинг 4-12 показывает содержимое этого списка.
Листинг 4-12. Формат списка списков
----------------------------------------------------------------
DOS STRUC
DOS_D_DCB DD 0 ; начало списка для последовательности
; блоков управления устройством (DCВ)
DOS_D_HDLSFT DD 0 ; начало списка описателя SFT
DOS_D_Clock DD 0 ; оглавление устройства для CurClk
DOS_D_Console DD 0 ; оглавление устройства для консоли
DOS_W_MaxSector DW 0 ; размер наибольшего сектора
DOS_D_Cache DD 0 ; начало списка для блоков управления
; кеш (CCB)
DOS_D_CDS DD 0 ; адрес структуры текущего каталога
DOS_D_FCBSFT DD 0 ; начало списка FCB SFT
DOS_W_Unknown DW 0 ; неизвестно
DOS_B_DriveCountDB 0 ; максимальное количество драйверов
; (значение устанавливается по lastdrive=)
DOS_B_LastDrive DB 0 ; текущее количество драйверов
DOS ENDS
----------------------------------------------------------------
|
|
|