次の方法で共有


SCSI ポート ドライバーの内部キューの凍結

SCSI ポート ドライバーは、クラス ドライバーからの調停を必要とするエラー状態が発生するたびに、その内部キューをフリーズします。 キューを凍結すると、SCSI ポートは、クラス ドライバーにエラー状態を報告し、クラス ドライバーに、キューに残っている要求の処理を再開する前にエラーを分析する機会を与えます。 たとえば、メディアが変更された場合、キューに登録された要求を取り消す必要がありますが、クラス ドライバーによる判定が必要になります。 特定の種類のメディアの削除が特定の要求に影響するかどうかを判断するのに十分なコンテキスト情報を持つのは、クラス ドライバーだけです。

特定の要求に対して、SrbFlags を SRB_FLAGS_NO_QUEUE_FREEZE とOR演算すると、ストレージ クラス ドライバーは SCSI ポートのキューをその特定の要求に関する問題の結果としてフリーズしません。 それ以外の場合、SCSI ポートは、次のいずれかの条件下でキューを固定します。

  • デバイスは要求に失敗し、SCSISTAT_CHECK_CONDITIONまたはSCSISTAT_COMMAND_TERMINATEDの状態を返します

  • 要求がタイムアウトします。

  • デバイスが要求を実行しているときにバスのリセットが発生する

  • 要求は、SCSIMESS_ABORTなどのバス メッセージ コマンドによって終了されます

SCSI ポートは、SRB の SrbStatus メンバーに設定されたSRB_STATUS_QUEUE_FROZEN フラグを使用してフリーズを引き起こした要求を返すことによって、キューがフリーズしていることを示します。 SCSI ポートは、クラス ドライバーからの新しい要求をキューに挿入しますが、キューが固定されている限り、SCSI ポートは、自動センスと電源要求以外のデバイスに要求を転送しません。

SRB_FLAGS_BYPASS_FROZEN_QUEUE フラグが要求の SrbFlags メンバーに設定されている場合、SCSI ポートは固定キューをバイパスし、要求を直ちに実行します。 SrbFlags が SRB_FLAGS_BYPASS_FROZEN_QUEUE で ORed である後続の要求では、SCSI ポートがキューをフラッシュします。

上位レベルのドライバーは、SRB_FUNCTION_RELEASE_QUEUEリリース キュー要求を使用して、SCSI ポートのキューの固定を解除することを強制できます。 SRB_FUNCTION_FLUSH_QUEUE は、キューに登録されているすべての要求を取り消した後も、キューの固定を解除します。