次の方法で共有


TAPE_ERROR_ROUTINE コールバック関数 (minitape.h)

TAPE_ERROR_ROUTINE では、SRB がエラー状態で完了したときに、デバイス固有のエラー処理が提供されます。 このルーチンは省略可能です。

構文

TAPE_ERROR_ROUTINE TapeErrorRoutine;

void TapeErrorRoutine(
  [in]      PVOID MinitapeExtension,
  [in]      PSCSI_REQUEST_BLOCK Srb,
  [in, out] PTAPE_STATUS TapeStatus
)
{...}

パラメーター

[in] MinitapeExtension

ドライバー固有のミニテープ拡張機能へのポインター。 ミニクラス ドライバーが初期化時にミニテープ拡張機能を要求しなかった場合、これは NULL です。

[in] Srb

失敗した操作の SRB へのポインター。

[in, out] TapeStatus

テープ クラス ドライバーによって設定 されたTAPE_STATUS へのポインター。 テープ ミニクラス ドライバーは、TAPE_STATUSを変更するか、変更せずに残すことができます。

戻り値

なし

解説

ほとんどのテープ ミニクラス ドライバーは、テープ クラス ドライバーによって設定 されたTAPE_STATUS コードが適切であるため 、TAPE_ERROR_ROUTINE ルーチンを提供しません。

ただし、一部のデバイスでは、テープ ミニクラス ドライバーは、テープ クラス ドライバーよりも適切なエラー コードを識別できます。 たとえば、テープ クラス ドライバーがTAPE_STATUS_BUS_RESETを返す場合、テープ ミニクラス ドライバーは、実際の問題が一部のデバイスのTAPE_STATUS_NO_MEDIAによってより正確に表されていることを判断できる場合があります。

テープ ミニクラス ドライバーは、必要に応じて、DriverEntryルーチンからTapeClassInitialize に渡すTAPE_INIT_DATA_EX構造体のTAPE_ERROR_ROUTINE ルーチンのエントリ ポイントを指定します。 このようなミニクラス ドライバーの場合、読み取り、書き込み、またはデバイス制御コマンド中にエラーが発生すると、テープ クラス ドライバーは適切なTAPE_STATUS コードを設定し、ミニテープ拡張機能、失敗した SRB、および返されるTAPE_STATUS コードを使用してミニクラス ドライバーの TAPE_ERROR_ROUTINE ルーチンを呼び出します。

TAPE_ERROR_ROUTINE は、入力パラメーターとそのデバイスの知識に基づいて、テープ クラス ドライバーによって提供される状態を変更するかどうかを決定します。 SRB_STATUS_AUTOSENSE_VALID ビットが Srb-SrbStatus> で設定されている場合、SRB には SenseInfoBuffer の SCSI センス情報が含まれます。 バッファーの長さは SenseInfoBufferLength ですTAPE_ERROR_ROUTINE ルーチンは、SRB 内の SrbStatus および ScsiStatus と共にこの情報を調べて、返されるTAPE_STATUSを変更するかどうかを判断する必要があります。

要件

要件
対象プラットフォーム デスクトップ
Header minitape.h (Minitape.h を含む)

こちらもご覧ください

テープ ミニクラス ドライバーの DriverEntry

SCSI_REQUEST_BLOCK

TAPE_INIT_DATA_EX

TAPE_STATUS

TapeClassInitialize