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

Драйверы могут определять настраиваемые константы IO_ERR_XXX для использования в качестве значений errorCode при регистрации ошибок. Пары драйверов, которые записываются вместе, также могут определять пользовательские значения STATUS_XXX для IRP_MJ_INTERNAL_DEVICE_CONTROL запросов.

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

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

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

STATUS_SEVERITY_SUCCESS
Указывает успешное значение NTSTATUS, например STATUS_SUCCESS, или значение, IO_ERR_RETRY_SUCCEEDED в пакетах журнала ошибок.

STATUS_SEVERITY_INFORMATIONAL
Указывает информационное значение NTSTATUS, например STATUS_SERIAL_MORE_WRITES.

STATUS_SEVERITY_WARNING
Указывает предупреждающее значение NTSTATUS, например STATUS_DEVICE_PAPER_EMPTY.

STATUS_SEVERITY_ERROR
Указывает значение NTSTATUS ошибки, например STATUS_INSUFFICIENT_RESOURCES для значения FinalStatus или IO_ERR_CONFIGURATION_ERROR для значения ErrorCode в пакетах журнала ошибок.

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

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

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

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

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

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

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

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