
- •Системное программное обеспечение
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Структура MS DOS
- •Системное программное обеспечение
- •Общие сведения о драйверах
- •Общие сведения о драйверах
- •Общие сведения о драйверах
- •Общие сведения о драйверах
- •Общие сведения о драйверах
- •Заголовок драйвера
- •Заголовок драйвера
- •Заголовок драйвера
- •Заголовок драйвера
- •Стратегия устройства
- •Стратегия устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Обработчик прерывания устройства
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Дocтуп к дpaйвepу уcтpoйcтвa
- •Системное программное обеспечение
- •Общие сведения о резидентных программах
- •Общие сведения о резидентных программах
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Установка резидентной программы
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Защита резидентной программы от повторной установки
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти
- •Выгрузка резидентной программы из памяти

Дocтуп к дpaйвepу уcтpoйcтвa
Используются следующие подфункции функции 44H прерывания 21H: а) подфункция 02 – чтение управляющей информации для символьных устройств. Здесь номер функции задается в регистре AH, номер подфункции – в регистре AL, дескриптор устройства – в BX, пара регистров DS:DX должна содержать адрес буфера для чтения данных, CX – число считываемых байт. При вызове прерывания
управление передается функции драйвера 3 (IOCTL_IN)
б) подфункция 03 – запись управляющей информации для символьных устройств. Здесь номер функции задается в регистре AH, номер подфункции – в регистре AL, дескриптор устройства – в BX, пара регистров DS:DX должна содержать адрес буфера с данными для записи, CX – число записываемых байт. При вызове прерывания управление передается функции драйвера 12 (IOCTL_OUT)

Дocтуп к дpaйвepу уcтpoйcтвa
в) подфункция 06 – получение статуса ввода. Здесь номер функции задается в регистре AH, номер подфункции – в регистре AL, дескриптор устройства – в BX. В регистре AL при сброшенном флаге CF возвращается информация о состоянии устройства (00H – устройство не готово, 0FFH – устройство готово). При разработке драйвера более важным является знание точки передачи управления внутри драйвера. Это функция 5 (NONDESTRUCT_IN)
г) подфункция 07 – получение статуса вывода. Здесь номер функции задается в регистре AH, номер подфункции – в регистре AL, дескриптор устройства – в BX. В регистре AL при сброшенном флаге CF возвращается информация о состоянии устройства (00H – устройство не готово, 0FFH – устройство готово). Точка передачи управления внутри драйвера - функция 10 (OUTPUT_STATUS)

Дocтуп к дpaйвepу уcтpoйcтвa
Для использования этих подфункций функции 44H прерывания 21H драйвер должен поддерживать интерфейс IOCTL, т.е. должен быть установлен в единицу бит 14 в слове атрибутов заголовка драйвера.
Для закрытия устройства используется функция закрытия файла 3EH прерывания 21H. Входным параметром этой функции является дескриптор устройства в BX.
При этом вызывается функция 14 (CLOSE) драйвера.

Дocтуп к дpaйвepу уcтpoйcтвa
Пример программы для доступа к символьному драйверу устройства
STACK |
SEGMENT PARA |
STACK |
'STACK' |
|
DB 128 DUP(0) |
|
|
STACK |
ENDS |
|
|
DSEG |
SEGMENT PARA PUBLIC |
'DATA' |
|
DEVICE |
DB 'TEST_DRV',0 |
|
;Имя устройства |
HANDL |
DW 0 |
|
;Номер устройства |
BUFF |
DB 1,2,3,4,5 |
|
;Тестовый буфер данных |
DSEG |
ENDS |
|
|
CSEG |
SEGMENT PARA PUBLIC |
'CODE' |
ASSUME CS:CSEG, DS:DSEG, SS:STACK
BEGIN:
MOV AX,DSEG MOV DS,AX
; Открыть файл (устройство) MOV DX,OFFSET DEVICE MOV AL,2
MOV AH,3DH INT 21H
MOV HANDL,AX
; Вывести в файл (в устройство) тестовый буфер MOV BX,HANDL
MOV DX,OFFSET BUFF MOV CX,5
MOV AH,40H INT 21H
;Закрыть файл (устройство) MOV BX,HANDL
MOV AH,3EH INT 21H
;Выход из программы
MOV AH,4CH
INT 21H
CSEG ENDS
END BEGIN


Системное программное обеспечение
Лекция № 9 «Резидентные программы в MS DOS»

Общие сведения о резидентных программах
Резидентные программы, или TSR-программы (Terminate and Stay Resident - завершить и остаться резидентной) – программы, остающиеся в оперативной памяти после своего завершения. Резидентная программа, находясь в памяти, выполняет свои функции через неиспользуемые или перехваченные прерывания. Связь с резидентной программой также осуществляется посредством прерываний.
Часто такие программы играют роль драйверов - программ поддержки каких-либо внешних устройств. Наиболее часто резидентные драйверы обеспечивают русифицированную работу экрана и клавиатуры или поддерживают работу мыши. Популярны резидентные переводчики и различные резидентные детекторы, позволяющие на ранней стадии обнаруживать появление вируса.

Общие сведения о резидентных программах
На TSR-программах держится значительная часть как чисто системной, так и прикладной программной поддержки в операционной системе MS DOS. MS DOS paccмaтpивaeт тaкиe пpoгpaммы кaк чacть oпepaциoннoй cиcтeмы, зaщищaя иx oт нaлoжeния дpугиx пpoгpaмм, кoтopыe будут зaгpужeны впocлeдcтвии.
Наличие в памяти резидентных программ предполагает как бы некое подобие многозадачного режима, в котором, однако, есть главная задача, выполняющаяся в данный момент. Остальные же задачи получают управление время от времени через перехваченные ими прерывания либо по инициативе главной задачи.

Установка резидентной программы
Существует два легальных документированных способа оставить программу резидентной в памяти:
1.прерывание 27Н
2.функция 31Н прерывания 21H
Peзидeнтныe пpoгpaммы на основе прерывания 27H oбычнo пишутcя в фopмe COM. Пpoгpaммы, нaпиcaнныe в фopмe EXE, ocтaвить peзидeнтными в пaмяти с помощью этого прерывания нeмнoгo тpуднee.
При вызове прерывания 27Н регистр DX дoлжeн coдepжaть cмeщeниe кoнцa резидентной части пpoгpaммы, oтcчитывaeмoe oт нaчaлa PSP. При запуске программы адрес PSP передается ей через регистры DS и ES, т.е. этот адрес равен DS:0000 или ES:0000. Для COM программ на PSP указывают также регистры CS и SS.
