Расширенная информация об ошибке.
14.2. Расширенная информация об ошибке.
Начиная с DOS 2.0, те функции DOS, при выполнении которых могут возникать ошибки, индицируют наличие ошибки установкой флага CY, при этом регистр AX содержит код ошибки. Следующие коды ошибок могут возвращаться в регистре AX:
Начиная с версии DOS 3.0 имеется функция 0x59, выдающая расширенную информацию об ошибке. При обращении к этой функции регистр BX должен содержать номер версии DOS (0 - для версии 3). На выходе функции регистр AX содержит расширенный код ошибки, BH - класс ошибки, BL - код предполагаемых действий, CH - локализацию ошибки.
Расширенные коды ошибок:
| 19 - 36 | -соответствуют кодам 0 - 17, передаваемым обработчику критической ошибки в регистре DI; |
| 36 - 49 | -зарезервировано; |
| 50 - 60 | -ошибки, связанные с работой в сети; |
| 61 - 63 | -ошибки спуллинга печати; |
| 55 - 72 | -ошибки, связанные с работой в сети; |
| 73 - 79 | -зарезервировано; |
| 80 | -файл уже существует; |
| 81 | -зарезервировано; |
| 82 | -невозможно создать элемент каталога; |
| 83 | -сбой при обработке прерывания по критической ошибке; |
| 84 | -слишком много перенаправлений; |
| 85 | -повторяющееся перенаправление; |
| 86 | -неправильный пароль; |
| 87 | -неправильный параметр; |
| 88 | -ошибка в данных сети. |
Классы ошибок:
| 1 | -нехватка ресурса (памяти, описателей файлов и т.п.); |
| 2 | -временная ситуация; |
| 3 | -превышение пользователем своих полномочий; |
| 4 | -внутренняя ошибка DOS; |
| 5 | -ошибка оборудования; |
| 6 | -системная ошибка DOS; |
| 7 | -ошибка применения (некорректный запрос, неверные параметры и т.п.); |
| 8 | -запрошенный файл или другой объект найден; |
| 9 | -неверный формат файла, диска и т.п.; |
| 10 | -файл или другой объект захвачен другим пользователем; |
| 11 | -ошибка носителя; |
| 12 | -файл или другой объект уже существует; |
| 13 | -неивестный класс. |
Предполагаемые действия:
| 1 | -повторить операцию несколько раз; |
| 2 | -повторить операцию после задержки; |
| 3 | - повторить ввод данных для DOS пользователем; |
| 4 | -снять задачу, выполнив операции завершения (закрытие файлов, обновление индексов, освобождение памяти и т.п.); |
| 5 | -снять задачу, не выполняя операции завершения; |
| 6 | -игнорировать ошибку; |
| 7 | -повторить операцию после выполнения пользователем каких-то действий. |
Локализация ошибки:
| 1 | -место ошибки не определено; |
| 2 | -ошибка на блочном устройстве; |
| 3 | -зарезервировано; |
| 4 | -ошибка на символьном устройстве; |
| 5 | -ошибка в памяти. |
Обработчик критической ошибки в примере 14.1 обращается к функции 0x59 и запоминает также расширенную информацию об ошибке. Чтобы не перегружать пример строковыми константами на печать выводятся только коды ошибки, класса и т.д., а не смысловые сообщения.