Definición de nuevos valores NTSTATUS

Los controladores pueden definir constantes IO_ERR_XXX personalizadas para usarlas como valores errorCode al registrar errores. Los pares de controladores que se escriben juntos también pueden definir valores STATUS_XXX personalizados para IRP_MJ_INTERNAL_DEVICE_CONTROL solicitudes.

En el diagrama siguiente se muestran los campos de bits en un valor NTSTATUS de 32 bits.

diagrama que ilustra los campos de bits en un valor ntstatus.

El campo Sev que se muestra en el diagrama anterior indica el código de gravedad, que debe ser uno de los siguientes valores definidos por el sistema:

STATUS_SEVERITY_SUCCESS
Indica un valor NTSTATUS correcto, como STATUS_SUCCESS o el valor IO_ERR_RETRY_SUCCEEDED en los paquetes del registro de errores.

STATUS_SEVERITY_INFORMATIONAL
Indica un valor NTSTATUS informativo, como STATUS_SERIAL_MORE_WRITES.

STATUS_SEVERITY_WARNING
Indica un valor NTSTATUS de advertencia, como STATUS_DEVICE_PAPER_EMPTY.

STATUS_SEVERITY_ERROR
Indica un valor NTSTATUS de error, como STATUS_INSUFFICIENT_RESOURCES para un valor FinalStatus o IO_ERR_CONFIGURATION_ERROR para un valor errorCode en los paquetes del registro de errores.

La mayoría de las constantes IO_ERR_XXX públicas pertenecen a la categoría STATUS_SEVERITY_ERROR.

El código facility especifica la instalación que generó el error. Para los nuevos valores IO_ERR_XXX , los controladores especifican el valor de FACILITY_IO_ERROR_CODE para Facility. Para los valores de STATUS_XXX personalizados, el significado de valores diferentes para Facility es definido por el controlador.

El bit de C especifica si el valor es definido por el cliente o definido por Microsoft. El bit se establece para los valores definidos por el cliente y se borra para los valores definidos por Microsoft.

Los controladores pueden definir nuevos valores IO_ERR_XXX para identificar mensajes de error personalizados en el registro de eventos del sistema. Para obtener una descripción de cómo definir los valores NTSTATUS y los mensajes de error que identifican, consulte Definición de tipos de error personalizados.

Los pares de controladores pueden definir valores de STATUS_XXX específicos del controlador para comunicar información sobre las solicitudes de IRP_MJ_INTERNAL_DEVICE_CONTROL definidas de forma privada del controlador inferior al controlador superior del par.

El controlador de clase debe asignar cualquier valor de STATUS_XXX privado a un valor NTSTATUS definido por el sistema cuando complete un IRP si se puede llamar a una rutina ioCompletion del controlador de nivel superior existente para ese IRP.

En el caso de los controladores de minipuerto de vídeo y visualización emparejados, el controlador de puerto de vídeo realiza la asignación entre los valores públicos STATUS_XXX y las constantes definidas por Win32 devueltas por los controladores de minipuerto de vídeo. Para obtener más información, consulta Controladores de miniporte de vídeo en el modelo de controladores de pantalla de Windows 2000.

Los controladores no pueden usar valores NTSTATUS personalizados para irP que se pueden recibir en modo de usuario, ya que solo los valores definidos por el sistema se pueden traducir en códigos de error de Win32.