新しい NTSTATUS 値の定義
ドライバーは、IO_ERR_XXX 定数を定義して、エラーのログ記録時に ErrorCode 値として使用できます。 一緒に書き込まれるドライバーのペアは、IRP_MJ_INTERNAL_DEVICE_CONTROL 要求に使用する、カスタムの STATUS_XXX 値も定義できます。
次の図は、32 ビット 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 要求に関する情報をペアの下位ドライバーから上位ドライバーに伝達できます。
既存の上位ドライバーの IoCompletion ルーチンが IRP に対して呼び出される可能性がある場合、クラス ドライバーはその IRP の完了時に、プライベート STATUS_XXX 値をシステム定義の NTSTATUS 値にマッピングする必要があります。
ペアリングされたディスプレイ ドライバーとビデオ ミニポート ドライバーの場合、ビデオ ポート ドライバーは、パブリック STATUS_XXX 値と、ビデオ ミニポート ドライバーによって返される Win32 で定義された定数の間のマッピングを行います。 詳細については、「Windows 2000 Display Driver Model のビデオ ミニポート ドライバー」を参照してください。
Win32 エラー コードに変換できるのはシステム定義の値のみであるため、ドライバーは、ユーザー モードで受信できる IRP にカスタム NTSTATUS 値を使用することはできません。