Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Недокументированные возможности MS-DOS - Функция 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

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

[ Оглавление ]

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
+1 / -0
Мне нравитсяМне не нравится
7 января 2005, 12:06:49
Да....
Интересная заметка, приму к сведению
Спасибо Вам за выкладывание на сайте такой инфы
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог