Недокументированные возможности 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 ;--------------------------------------------------------------------------
Оставить комментарий
Комментарии
Интересная заметка, приму к сведению
Спасибо Вам за выкладывание на сайте такой инфы