Поделиться через


Определение новых значений NTSTATUS

Драйверы могут определять пользовательские константы IO_ERR_XXXX для использования в качестве значений ErrorCode при ведении журнала ошибок. Пары драйверов, написанных вместе, также могут определять пользовательские значения STATUS_XXXX для запросов IRP_MJ_INTERNAL_DEVICE_CONTROL .

На следующей схеме показаны битовые поля в 32-разрядном значении NTSTATUS.

схема, иллюстрирующая битовые поля в значении ntstatus.

Поле Sev , показанное на предыдущей схеме, указывает код серьезности, который должен быть одним из следующих системных значений:

СТАТУС_ПРИОРИТЕТ_УСПЕХ
Указывает успешное значение NTSTATUS, например STATUS_SUCCESS, или значение IO_ERR_RETRY_SUCCEEDED в пакетах журнала ошибок.

СТАТУС_СТЕПЕНЬ_ИНФОРМАЦИИ
Указывает информационное значение NTSTATUS, например STATUS_SERIAL_MORE_WRITES.

СТАТУС_СЕРЬЁЗНОСТЬ_ПРЕДУПРЕЖДЕНИЕ
Указывает предупреждающее значение NTSTATUS, например STATUS_DEVICE_PAPER_EMPTY.

СТАТУС_СЕРЬЕЗНОСТЬ_ОШИБКА
Указывает значение NTSTATUS ошибки в пакетах журнала ошибок, например, STATUS_INSUFFICIENT_RESOURCES для значения FinalStatus или IO_ERR_CONFIGURATION_ERROR для значения ErrorCode.

Большинство общедоступных констант IO_ERR_XXX относятся к категории STATUS_SEVERITY_ERROR.

Код объекта указывает объект, создающий ошибку. Для новых значений IO_ERR_XXXX драйверы указывают значение FACILITY_IO_ERROR_CODE для объекта. Для пользовательских значений STATUS_XXX значение параметров для функциональной области определяется драйвером.

Бит C указывает, определено ли значение клиентом или корпорацией Майкрософт. Бит устанавливается для определяемых клиентом значений и очищается для определенных корпорацией Майкрософт значений.

Драйверы могут определять новые значения IO_ERR_XXXX, чтобы определить пользовательские сообщения об ошибках в системном журнале событий. Описание определения значений NTSTATUS и сообщений об ошибках, которые они определяют, см. в разделе "Определение пользовательских типов ошибок".

Пары драйверов могут определять значения STATUS_XXXX, предназначенные для обмена сведениями о частных запросах IRP_MJ_INTERNAL_DEVICE_CONTROL от нижнего к верхнему драйверу пары.

Драйвер класса должен сопоставить любое частное значение STATUS_XXXX со значением NTSTATUS, определяемым системой, при завершении IRP, если для этого IRP может вызываться существующая подпрограмма IoCompletion драйвера более высокого уровня.

Для парных драйверов дисплея и минипортов видео, драйвер видеопорта выполняет сопоставление между общедоступными значениями STATUS_XXX и константами Win32, которые возвращаются минипортами видео. Дополнительные сведения см. в разделе "Драйверы минипорта видео" в модели драйвера для отображения Windows 2000.

Драйверы не могут использовать пользовательские значения NTSTATUS для irPs, которые можно получить в пользовательском режиме, так как только системные значения можно преобразовать в коды ошибок Win32.