IOCTL_STORAGE_BREAK_RESERVATION IOCTL (ntddstor.h)
ディスク予約を中断します。 マルチイニシエーター ("クラスター化") システムでは、1 台のコンピューターがディスク リソースを予約して、他のコンピューターがディスクにアクセスできないようにすることができます。 コンピューターが適切なタイミングでリソースを解放できない場合は、ディスクの予約を強制的に削除する手段が必要です。
システムに予約済みディスク リソースの解放を強制する手段の 1 つは、バスをリセットすることです。 実際、バス アダプターが SCSI ポート ドライバーによって管理されているストレージ デバイスの場合、IOCTL_STORAGE_BREAK_RESERVATION要求は、バスのリセットを行うだけで、予約されているすべてのリソースを解放する IOCTL_STORAGE_RESET_BUSに相当します。
バス アダプターが STOR ポート ドライバーによって管理されているストレージ デバイスの場合、この I/O 制御コードは、ディスク予約を中断する優れた手法を提供します。 この手法は、"階層的リセット" と呼ばれます。IOCTL_STORAGE_BREAK_RESERVATION要求を受信すると、STOR ポート ドライバーは最初に論理ユニット自体をリセットして論理ユニットの予約の削除を試みます。 これが失敗した場合、STOR ポート ドライバーは論理ユニットの親であるターゲット デバイスのリセットを試みます。 ターゲット デバイスのリセットが失敗した場合にのみ、ポート ドライバーによってバスがリセットされます。
バスをリセットすると、すべてのデバイス予約と転送速度の設定がクリアされ、再ネゴシエーションが必要になります。 これは時間のかかる操作であるため、IOCTL_STORAGE_BREAK_RESERVATIONは常に単純なバス リセットに優先されます。
呼び出し元は、バスリセットを発行するために読み取りアクセス権のみを必要とします。
保留中の SRB の SrbStatus フラグは、SRB_STATUS_BUS_RESETに設定されます。
メジャー コード
[入力バッファー]
Irp-AssociatedIrp.SystemBuffer の>バッファーには、リセットするバスを識別するSTORAGE_BREAK_RESERVATION_REQUEST構造体が含まれています。
入力バッファーの長さ
STORAGE_BREAK_RESERVATION_REQUEST構造体の長さ。
出力バッファー
[なし] :
出力バッファーの長さ
[なし] :
ステータス ブロック
[情報] フィールドは 0 に設定されます。 [状態] フィールドはSTATUS_SUCCESSに設定されているか、場合によってはSTATUS_INSUFFICIENT_RESOURCES、STATUS_NOT_IMPLEMENTED、またはSTATUS_INVALID_DEVICE_REQUESTに設定されます。
要件
要件 | 値 |
---|---|
Header | ntddstor.h (Ntddstor.h を含む) |