16.6.3 Setting NTSTATUS Values in Error Log Packets

Both the ErrorCode and FinalStatus members of the error log packet are of type NTSTATUS. Figure 16.5 shows the layout for NTSTATUS values.

Figure 16.5 NTSTATUS layout

NT drivers must set an NTSTATUS-type IO_ERR_XXX  value for ErrorCode and a STATUS_XXX  value for FinalStatus in each error log packet.

The system supplies a set of public IO_ERR_XXX  constants for setting the ErrorCode in an error log packet. For example, NT drivers can use the following system-defined constants:
IO_ERR_RETRY_SUCCEEDED 
IO_ERR_INSUFFICIENT_RESOURCES 
IO_ERR_CONFIGURATION_ERROR 
IO_ERR_INCORRECT_IRQL 
IO_ERR_INVALID_IOBASE 
IO_ERR_DRIVER_ERROR 
IO_ERR_PARITY 
    :     : 
IO_ERR_OVERRUN_ERROR 
IO_ERR_TIMEOUT 
IO_ERR_CONTROLLER_ERROR 
IO_ERR_INTERNAL_ERROR 
 
The system also supplies a set of public STATUS_XXX  values that NT drivers can use to set FinalStatus in error log packets and can return from their standard driver routines for NTSTATUS. For example, NT drivers can return the following system-defined constants for NTSTATUS from their standard driver routines, can set any of the following in the I/O status block of IRPs, and can set some of the following for FinalStatus in error log packets:
STATUS_SUCCESS 
STATUS_DEVICE_CONFIGURATION_ERROR 
STATUS_DRIVER_INTERNAL_ERROR 
STATUS_INVALID_DEVICE_STATE 
STATUS_IO_DEVICE_ERROR 
    :     : 
STATUS_DEVICE_BUSY 
STATUS_DEVICE_DOES_NOT_EXIST 
STATUS_ADAPTER_HARDWARE_ERROR 
 

Public IO_ERR_XXX  and STATUS_XXX  constants are system resources, and each such STATUS_XXX  is mapped to a corresponding Win32 constant by the system. Because they are built into Windows NT, public IO_ERR_XXX  and STATUS_XXX  constants can be added to the system only with the cooperation of Microsoft Corporation.