Определение новых значений NTSTATUS
Драйверы могут определять настраиваемые константы IO_ERR_XXX для использования в качестве значений errorCode при регистрации ошибок. Пары драйверов, которые записываются вместе, также могут определять пользовательские значения STATUS_XXX для IRP_MJ_INTERNAL_DEVICE_CONTROL запросов.
На следующей схеме показаны битовые поля в 32-разрядном значении 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 можно преобразовать только системные значения.