定义新的 NTSTATUS 值

驱动程序可以定义自定义 IO_ERR_XXX 常量,以在记录错误时用作 ErrorCode 值。 一起编写的驱动程序对还可以为IRP_MJ_INTERNAL_DEVICE_CONTROL请求定义自定义STATUS_XXX 值。

下图显示了 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 值,例如 FinalStatus 值的STATUS_INSUFFICIENT_RESOURCES或错误日志数据包中 ErrorCode 值的IO_ERR_CONFIGURATION_ERROR。

大多数公共IO_ERR_XXX 常量属于STATUS_SEVERITY_ERROR类别。

设施代码指定生成错误的设施。 对于新的 IO_ERR_XXX 值,驱动程序为 Facility 指定FACILITY_IO_ERROR_CODE值。 对于自定义STATUS_XXX 值, Facility 的不同值的含义是驱动程序定义的。

C 位指定该值是客户定义的还是 Microsoft 定义的。 为客户定义的值设置位,为 Microsoft 定义的值设置清除位。

驱动程序可以定义新的 IO_ERR_XXX 值,以标识系统事件日志中的自定义错误消息。 有关如何定义 NTSTATUS 值及其识别的错误消息的说明,请参阅 定义自定义错误类型

驱动程序对可以定义特定于驱动程序的 STATUS_XXX 值,以传达有关私下 定义的IRP_MJ_INTERNAL_DEVICE_CONTROL 请求的信息,从该对的较低驱动程序到更高的驱动程序。

类驱动程序必须在完成 IRP 时将任何专用 STATUS_XXX 值映射到系统定义的 NTSTATUS 值,如果可以为该 IRP 调用现有的更高级别的驱动程序的 IoCompletion 例程。

对于配对的显示和视频微型端口驱动程序,视频端口驱动程序执行公共STATUS_XXX 值与视频微型端口驱动程序返回的 Win32 定义的常量之间的映射。 有关详细信息,请参阅 Windows 2000 显示驱动程序模型中的视频微型端口驱动程序

驱动程序不能对可以在用户模式下接收的 IRP 使用自定义 NTSTATUS 值,因为只有系统定义的值可以转换为 Win32 错误代码。