新しい NTSTATUS 値の定義

ドライバーは、IO_ERR_XXX 定数を定義して、エラーのログ記録時に ErrorCode 値として使用できます。 一緒に書き込まれるドライバーのペアは、IRP_MJ_INTERNAL_DEVICE_CONTROL 要求に使用する、カスタムの STATUS_XXX 値も定義できます。

次の図は、32 ビット NTSTATUS 値のビット フィールドを示しています。

diagram illustrating the bit fields in an ntstatus value.

前の図に示す 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 要求に関する情報をペアの下位ドライバーから上位ドライバーに伝達できます。

既存の上位ドライバーの IoCompletion ルーチンが IRP に対して呼び出される可能性がある場合、クラス ドライバーはその IRP の完了時に、プライベート STATUS_XXX 値をシステム定義の NTSTATUS 値にマッピングする必要があります。

ペアリングされたディスプレイ ドライバーとビデオ ミニポート ドライバーの場合、ビデオ ポート ドライバーは、パブリック STATUS_XXX 値と、ビデオ ミニポート ドライバーによって返される Win32 で定義された定数の間のマッピングを行います。 詳細については、「Windows 2000 Display Driver Model のビデオ ミニポート ドライバー」を参照してください。

Win32 エラー コードに変換できるのはシステム定義の値のみであるため、ドライバーは、ユーザー モードで受信できる IRP にカスタム NTSTATUS 値を使用することはできません。