Definindo novos valores NTSTATUS

Os drivers podem definir constantes IO_ERR_XXX personalizadas a serem usadas como valores ErrorCode ao registrar erros em log. Pares de drivers gravados juntos também podem definir valores personalizados STATUS_XXX para solicitações de IRP_MJ_INTERNAL_DEVICE_CONTROL .

O diagrama a seguir mostra os campos de bits em um valor NTSTATUS de 32 bits.

diagrama ilustrando os campos de bit em um valor ntstatus.

O campo Sev mostrado no diagrama anterior indica o código de gravidade, que deve ser um dos seguintes valores definidos pelo sistema:

STATUS_SEVERITY_SUCCESS
Indica um valor NTSTATUS bem-sucedido, como STATUS_SUCCESS ou o valor IO_ERR_RETRY_SUCCEEDED em pacotes de log de erros.

STATUS_SEVERITY_INFORMATIONAL
Indica um valor NTSTATUS informativo, como STATUS_SERIAL_MORE_WRITES.

STATUS_SEVERITY_WARNING
Indica um valor NTSTATUS de aviso, como STATUS_DEVICE_PAPER_EMPTY.

STATUS_SEVERITY_ERROR
Indica um valor NTSTATUS de erro, como STATUS_INSUFFICIENT_RESOURCES para um valor FinalStatus ou IO_ERR_CONFIGURATION_ERROR para um valor ErrorCode em pacotes de log de erros.

A maioria das constantes IO_ERR_XXX públicas pertence à categoria STATUS_SEVERITY_ERROR.

O código facility especifica a instalação que gerou o erro. Para novos valores IO_ERR_XXX , os drivers especificam o valor FACILITY_IO_ERROR_CODE para Facility. Para valores personalizados STATUS_XXX , o significado de valores diferentes para Facility é definido pelo driver.

O bit C especifica se o valor é definido pelo cliente ou definido pela Microsoft. O bit é definido para valores definidos pelo cliente e claro para valores definidos pela Microsoft.

Os drivers podem definir novos valores IO_ERR_XXX para identificar mensagens de erro personalizadas no log de eventos do sistema. Para obter uma descrição de como definir os valores NTSTATUS e as mensagens de erro que eles identificam, consulte Definindo tipos de erro personalizados.

Pares de drivers podem definir valores de STATUS_XXX específicos do driver para comunicar informações sobre solicitações de IRP_MJ_INTERNAL_DEVICE_CONTROL definidas de forma privada do driver inferior ao maior do par.

O driver de classe deve mapear qualquer valor de STATUS_XXX privado para um valor NTSTATUS definido pelo sistema quando concluir um IRP se uma rotina IoCompletion de driver de nível superior existente puder ser chamada para esse IRP.

Para drivers de miniporte de vídeo e exibição emparelhados, o driver da porta de vídeo faz o mapeamento entre os valores públicos STATUS_XXX e as constantes definidas pelo Win32 retornadas por drivers de miniporte de vídeo. Para obter mais informações, consulte Drivers de miniporto de vídeo no modelo de driver de exibição do Windows 2000.

Os drivers não podem usar valores NTSTATUS personalizados para IRPs que podem ser recebidos no modo de usuário, pois somente os valores definidos pelo sistema podem ser convertidos em códigos de erro Win32.