Расширенная информация об ошибке.
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 и запоминает также расширенную информацию об ошибке. Чтобы не перегружать пример строковыми константами на печать выводятся только коды ошибки, класса и т.д., а не смысловые сообщения.