ФУНКЦИЯ 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 ;-------------------------------------------------------------------------- Алексей Баулин (PEGASUS Software). 150000, г.Ярославль, ул.Б.Октябрьская, д.63/3, кв.29 телефоны: (085-2) 25-49-53 (раб) (085-2) 22-51-05 (дом)