[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Операционные системы / Разное /

Функция 13h прерывания 21h. Недокументированные возможности

Функция 13h прерывания 21h относится к серии функций, выполняющих операции с файлами с использованием FCB. Она удаляет файл или группу файлов.

Эта функция имеет один недокументированный случай, когда расширенный FCB использует имя файла ??????????? и атрибут файла 1Fh. При этой специфической комбинации функция 13h удаляет все файлы в текущем каталоге, включая файлы с атрибутами "только для чтения", "том" и "каталог". Чтобы усугубить положение, эта функция заменяет первый символ в имени удаленного файла на 0, а не на обычный 0E5h. Это вводит в заблуждение многие утилиты восстановления файлов.

Таким образом, будучи примененной в головном каталоге, она эффективно удаляет все файлы на диске. Так как подкаталоги являются не более чем специальными файлами, содержащими информацию о каталоге, исключения для них не делается. В результате это препятствует всякому доступу к файлам, которые были в тех подкаталогах, включая любые подкаталоги большей глубины. Следует заметить, что файлы в тех подкаталогах не удаляются и занимаемое ими на диске место остается занятым. Удаляется только информация о них в каталогах. Следовательно, утилита CHKDSK сообщит об этих неучтенных файлах как о кластерах, не включенных в пространство диска (потерянных). Конечно, эти удаленные файлы возможно восстановить, но только усердной работой с дисковым редактором.

Такое поведение MS-DOS по меньшей мере странно. Обычно только внутренние процедуры MS-DOS могут изменять или удалять файлы, помеченные атрибутом "подкаталог". То, что функции, оперирующей с FCB, дозволено удалять эти файлы - невероятная причуда MS-DOS.

;----------------------------------------------------------------------
;	Пример использования недокументированново свойства функции 13h
;	прерывания 21h.
;	НИ В КОЕМ СЛУЧАЕ НЕ ВЫПОЛНЯЙТЕ ЭТОТ ПРИМЕР НА ЖЕСТКОМ ДИСКЕ:
;	ЭТО МОЖЕТ ПРИВЕСТИ К НЕПРЕДСКАЗУЕМЫМ ПОСЛЕДСТВИЯМ. ЕСЛИ УЖ ЕСТЬ
;	ГОРЯЧЕЕ ЖЕЛАНИЕ ИСПЫТАТЬ ЕЕ, ВЫДЕЛИТЕ ДЛЯ ЭТОЙ ЦЕЛИ ОТДЕЛЬНУЮ
;	ДИСКЕТУ.
;-----------------------------------------------------------------------

		mov	ax, offset RETURN     ; Взять смещение адреса возврата
		push	ax                    ; Занести в стек флаги, сегмент
		push	cs                    ;    и смещение адреса возврата
		pushf                         ;    в обратном порядке.
		mov	cl, 13h               ; Функция: удалить по FCB
		mov	dx, offset FCB        ; Расширенный FCB
		push	cs                    ; Для уверенности, что DS
		pop	ds                    ;    указывает на текущий код.
		jmp	dword ptr ALT_DOS_PTR ; Выполнить функцию.

RETURN:		mov	ah, 4Ch               ; Завершить процесс через DOS.
		int	21h                   ;

ALT_DOS_PTR	dw	00C0h, 0000           ; Адрес для перехода в альтер-
					      ;    нативный обработчик
FCB		db 	0FFh		; Расширенный FCB
		db	5 dup (0)       ; Зарезервированные байты
		db	1Fh             ; Установлены все биты атрибута файла
		db	0               ; Номер дискового устройства
		db	"???????????"   ; Искать все файлы
		db	19h dup (0)     ; Остальная часть FCB

;--------------------------------------------------------------------------



Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Операционные системы / Разное /

Содержимое PSP: Ячейки 05h-09h описание действий для вызова функций DOS в стиле CP/M
15-02-2010   

В операционной системе CP/M программисты для вызова функций DOS использовали близкий CALL: по смещению 5 в PSP каждойпрограммы находится команда CALL FAR seg:off, которая теоретически позволяет вызвать DOS выполнением команды CALL 0005, точно так же, как в CP/M... подробнее

Кол. просмотров: общее - 3193 сегодня - 1

Альтернативный обработчик прерывания int 21h
15-02-2010   

Альтернативный обработчик прерывания 21h предъявляет другие требования к входным параметрам, чем обычный вызов INT 21h. Его использование требует некоторых специальных действий и понимания того, что он позволяет... подробнее

Кол. просмотров: общее - 2999 сегодня - 0

Функция 13h прерывания 21h. Недокументированные возможности
15-02-2010   

Функция 13h прерывания 21h относится к серии функций, выполняющих операции с файлами с использованием FCB. Она удаляет файл или группу файлов... подробнее

Кол. просмотров: общее - 2938 сегодня - 0

Прерывания 30h и 31h
15-02-2010   

Прерывания 30h и 31h не используются в DOS и о них ничего не говорится в обычных руководствах программиста по DOS. Строго говоря, их вообще нельзя назвать прерываниями и тем более пытаться их выполнить. Ни к чему хорошему это не приведет, поскольку ячейки памяти, зарезервированные для векторов этих двух прерываний (0:00C0 - 0:00C7) не содержат, как обычно, адресов процедур, выполняющих обработку прерываний... подробнее

Кол. просмотров: общее - 2682 сегодня - 0

Эксперименты с QNX
26-01-2009   

Эта инфа была написана в первую очередь для тех, у кого проблемы с жестким диском, а также для тех, кто с минимальной конфигурацией хочет выбраться в интернет... подробнее

Кол. просмотров: общее - 2811 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects