定義新的 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類別。

Facility 程式代碼會指定產生錯誤的設施。 針對新的 IO_ERR_XXX 值,驅動程式會指定 [設施] 的FACILITY_IO_ERROR_CODE值。 針對自訂STATUS_XXX 值, 設備 的不同值意義是驅動程式定義的。

C位會指定值是否為客戶定義或 Microsoft 定義。 位是針對客戶定義的值設定,並清除 Microsoft 定義的值。

驅動程式可以定義新的 IO_ERR_XXX 值,以識別系統事件記錄檔中的自訂錯誤訊息。 如需如何定義 NTSTATUS 值及其識別的錯誤訊息的描述,請參閱 定義自訂錯誤類型

驅動程式配對可以定義驅動程式特定的STATUS_XXX 值,以傳達私下定義 IRP_MJ_INTERNAL_DEVICE_CONTROL 要求的相關資訊,從較低層級到較高配對的驅動程式。

如果現有較高層級驅動程式的 IoCompletion 常式可能針對該 IRP 呼叫現有的較高層級驅動程式IoCompletion常式,則類別驅動程式必須將任何私用STATUS_XXX值對應至系統定義的 NTSTATUS 值。

針對配對的顯示器和視訊迷你埠驅動程式,視訊埠驅動程式會執行公用STATUS_XXX 值與視訊迷你埠驅動程式所傳回之 Win32 定義的常數之間的對應。 如需詳細資訊,請參閱 Windows 2000 顯示驅動程式模型中的影片迷你埠驅動程式

驅動程式無法在使用者模式中接收的 IRP 使用自訂 NTSTATUS 值,因為只有系統定義的值可以轉譯成 Win32 錯誤碼。