ディスク予約を中断します。 マルチイニシエーター ("クラスター化") システムでは、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に設定されます。
必要条件
要件 | 価値 |
---|---|
ヘッダー | ntddstor.h (Ntddstor.h を含む) |