|
Так же перед окончанием работы Вы должны восстановить PSP
первоначальной программы переднего плана.
Счетчик обращений является первым полем входа и содержит
слово, в котором записано, сколько раз файл или устройство были
открыты. Перед размещением нового входа, DOS проверяет все су-
ществующие входы для проверки, не открыт ли уже файл или устройс-
тво, к которым сделан запрос. |
asplinux deluxe |
|
{img2} |
avast 4 professional edition |
|
Если вход SFT уже существует, DOS
увеличивает счетчик обращений перед размещением нового входа. DOS
уменьшает счетчик обращений, когда файл/устройство закрываются,
но не освобождает вход до обнуления счетчика обращений.
Когда DOS обрабатывает запрос на открытие или создание (че-
рез FCB или описатель), он записывает текущий PSP в поле хозяина
SFT и записывает биты состояния (означающие запрос на открытие в
исключительном режиме или в режиме чтения) в поле режима SFT, ес-
ли файл не был открыт раньше. |
резервное копирование файлов |
|
{img3} |
операционная система windows |
|
Биты состояния определяют, какой
тип доступа будет разрешен.
Листинг 4-14. Структура входа SFT
----------------------------------------------------------------
SFT STRUC
SFT_W_RefCnt DW 0 ; [00] счетчик обращений
SFT_W_Mode DW 0 ; [02] режим открытия
SFT_B_DirAttrib DB 0 ; [04]
- 4-20 -
SFT_W_Flags DW 0 ; [05]
SFT_D_DCB DD 0 ; [07] (FILE) блок управления устройством
SFT_W_Cluster1 DW 0 ; [0b] (FILE) начальный кластер
SFT_W_HHMMS DW 0 ; [0d] (FILE) часы, минуты, секунды
SFT_W_YYMMDD DW 0 ; [0f] (FILE) год, месяц, день
SFT_D_FilSiz DD 0 ; [11] размер файла/размещение EOF
SFT_D_FilPos DD 0 ; [15] текущая позиция файла
SFT W RelClstr DW 0 ; [19] (FILE) начало кластеров
SFT_W_CurClstr DW 0 ; [1b] (FILE) текущий кластер
SFT_W_LBN DW 0 ; [1d] (FILE) номер блока
SFT_W_DirIndex DB 0 ; [1f] (FILE) индекс каталога
SFT_T_FileName DB 0bh DUP (0) ; [20] (FILE) имя файла
SFT_T_Unknown DB 04h DUP (0) ; [2b] неизвестно
SFT_W_OwnerMach DW 0 ; [2f] номер машины владельца файла
SFT_W_OwnerPSP DW 0 ; [31] PSP задачи, которая начинается
SFT_W_Status DW 0 ; [33]
SFT ENDS
SFT_K_Size EQU SIZE SET
;
;MOde field
;
SFT_M_FCB EQU 8000h ; вход для FCB
SFT_M_DenyNone EQU 0040h ; разделяемые биты (4-6)
SFT_M_DenyRead EQU 0030h ; "
SFT_M_DenyWrite EQU 0020h ; "
SFT_M_Exclusive EQU 0010h ; "
SFT_M_NetFCB EQU 0070h ; это сетевой FCB
SFT_M_Write EQU 0001h ; биты доступа к файлу
SFT_M_Read EQU 0000h ; "
;
;Flags Field
;
SFT_M_Shared EQU 8000h ; сетевой доступ
SFT_M)DateSet EQU 4000h ; набор данных (только для FILE)
SFT_M_IOCTL EQU 4000h ; поддержка IOCTL (только для DEVICE)
SFT_M_IsDevice EQU 0080h ; вход для устройства
SFT_M_EOF EQU 0040h ; (DEVICE) конец ввода файла
SFT_M_Binary EQU 0020h ; (DEVICE) прозрачный режим
SFT_M_Special EQU 0010h ; (DEVICE) поддерживает вывод int 29h
SFT_M_IsClock EQU 0008h ; (DEVICE) устройство текущего времени
SFT_M_IsNul EQU 0004h ; (DEVICE) текущее фиктивное устройство
SFT_M_IsStdOut EQU 0002h ; (DEVICE) текущее устройство вывода
SFT_M_IsStdIn EQU 0001h ; (DEVICE) текущее устройство входа
SFT_M_Written EQU 0040h ; (FILE) пользовательский файл
SFT_M_DriveMask EQU 003fh ; (FILE) маска для битов драйвера (0-5)
----------------------------------------------------------------
Сегмент программного префикса (PSP)
Когда DOS загружает программу, он создает сегмент префикса
программы. |
avast 4 home |
|
|
win zip, avast 4, kaspersky, norton antivirus, avast 4 server, .
avast home
|
Формат списка списков
----------------------------------------------------------------
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
----------------------------------------------------------------
Системная таблица файлов
Из всех структур данных, за которыми обращаются в список
- 4-19 -
списков, для TSR наиболее важны входы в таблицу системы файлов.
Информация, которую содержат эти входы, влияет на способ обработ-
ки резидентными программами запросов на ввод/вывод. Эти структуры
данных, которые размещены во внешней области данных DOS, содержат
один или несколько блоков. Каждый блок содержит заголовок, кото-
рый указывает на следующий блок, и несколько входов таблицы фай-
ловой системы. Каждый вход SFT является структурой данных.
Длина заголовка 6 байтов. Первое поле - это двойное слово,
которое содержит адрес следующего блока в таблице файловой систе-
мы или единицу для обозначения конца списка. Второе поле - слово,
которое указывает количество входов системы. Листинг 4-13 иллюст-
рирует структуру SFT.
Листинг 4-13. Оглавление блока таблицы файлов системы
----------------------------------------------------------------
SFTTBL STRUC
SFTTBL_D_Next DD 0
SFTTBL_W Count DW 0
SFTTBL ENDS
SFTTBL_K_Size EQU SIZE SFTTBL ; определено для дальнейшего
; использования
----------------------------------------------------------------
Многие поля каждого входа SFT важны только для блоковых уст-
ройств, но значение счетчика обращений и поле хозяина PSP непос-
редственно касаются TSR. Когда DOS открывает файл, он помещает
вход в таблицу файловой системы и записывает текущий PSP в поле
хозяина PSP со смещением 22h. Так как только владелец файла может
закрыть его, то перед запросом к DOS закрыть файл, Вы должны быть
уверены, что именно Ваш PSP установлен в качестве текущей прог-
раммы.
|
|
|