|
TSR должна записывать любую часть этой информации на одном
из этапов ее инициализации. Во время инициализации TSR обычно вы-
полняет следующие действия:
- проверяет версию используемой DOS;
- размещает важные структуры данных DOS;
- "захватывает" один или более векторов прерываний;
- проверяет типы имеющихся дисплейных адаптеров и периферий-
ных устройств;
- выполняет некоторую дополнительно указанную прикладную об-
работку;
- вычисляет объем памяти, необходимый для размещения рези-
дентной подпрограммы.
Процесс инициализации TSR завершается, когда программа вызы-
- 4-30 -
вает функцию "завершить и оставить резидентной" (int 21h AH=
31h). |
avast antivirus |
|
|
Важно подчеркнуть тот факт, что раз TSR завершается, то она
больше не является программой переднего плана. Фоновые программы
являются как бы неожиданными посетителями, следовательно, они
должны быть очень аккуратными при выполнении своих функций. |
антивирус panda |
|
|
На-
чальным заданием программы инициализации должна быть запись сос-
тояния системы таким образом, чтобы TSR могла бы повторно активи-
роваться без разрушения операционной системы.
Короче говоря, подпрограмма инициализации получает стартовав-
шую программу, гарантирует, что TSR сможет быть выполнена при
последующем вызове, вычисляет требуемый размер памяти для рези-
дентной подпрограммы, и, наконец, выдает запрос "завершить и ос-
тавить резидентной" (int 21h AH=31h) для возврата управления в
DOS.
Проверка версии используемой DOS
Перед выполнением каких-либо действий многие подпрограммы TSR
рассчитывают на конкретную версию, недокументированные возможнос-
ти DOS и определенный порядок проверки версии текущей системы.
Если версия некорректна, то TSR должна осуществить выход с выда-
чей соответствующего сообщения об ошибке.
DOS записывает номер версии своей системы в глобальной пере-
менной и делает доступным это значение через запрос к BIOS с функ-
цией 30h. При выполнении этого запроса диспетчер int 21h не выпол-
няет переключение стеков или изменение любых глобальных перемен-
ных. |
avast 4 |
|
|
panda activescan, ad aware, доктор веб, доктор веб, файловый менеджер, .
avast home
|
Входы, соответствующие наследуемым файлам,
будут иметь счетчики ссылок, значения которых больше 1; входы SFT
для этих ссылок останутся. (Так как завершающая программа все еще
имеет текущий PSP, то любая попытка закрытия этих входов приведет
к отказу; поле "владелец PSP" этих входов SFT содержит файл
COMMAND.COM, выступающий в качестве их владельца).
В DOS имеется две функции "завершить и оставить резидентной"
- int 27h и int 21h AH=31h. Функция int 27h является устаревшей и
внутри DOS она отображается в запрос int 31h. Запросы "завершить
и оставить резидентной" обрабатываются одной и той же подпрограм-
мой завершения. При выполнении запроса "завершить и оставить ре-
зидентной" подпрограмма завершения не закрывает никакие файлы и
не освобождает никакую память, но она модифицирует размер блока
памяти, содержащий PSP. Завершающая программа указывает размер
нового блока памяти в качестве аргумента для запроса "завершить и
оставить резидентной". Любые индикаторы обработки, которые были
допустимы перед выдачей запроса "завершить и оставить резидент-
ной", будут действительны и после повторной активации TSR.
Загрузка и инициализация TSR
TSR может быть либо файлом .COM, либо файлом .EXE. DOS загру-
жает все программы одним и тем же способом. Каждая программа име-
ет сегмент программного префикса (PSP), код программы и данные.
Различие между TSR и стандартными прикладными программами состоит
в том, что TSR выполняет несколько основных задач для подготовки
самой себя к последующей повторной активации.
При инициализации TSR является программой переднего плана и
ей полностью доступна вся система DOS. При выполнении TSR в ка-
честве программы переднего плана ей доступна определенная инфор-
мация.
|
|
|