IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)
汎用ストレージ クラス ドライバー (classpnp.sys) は、永続的な予約出力コマンドを発行するための I/O コントロール (IOCTL) インターフェイスを公開します。 永続予約 Out コマンドを受信したときのストレージ デバイスの動作については、SCSI プライマリ コマンド - 2 (SPC-2) 仕様を参照してください。 IOCTL インターフェイスでは、永続的な予約アウト コマンドの物理デバイスへの読み取り/書き込みアクセス権を呼び出し元に付与する必要があります。 ユーザー モード アプリケーション、サービス、カーネル モード ドライバーは、この IOCTL を使用して永続的な予約を制御できます。 ドライバーから呼び出された場合は、IRQL < DISPATCH_LEVEL で実行されているスレッドからこの IOCTL を呼び出す必要があります。 この IOCTL はFILE_READ_ACCESSとFILE_WRITE_ACCESSで定義されており、永続的な予約出力コマンドを発行するには、読み取りアクセス許可と書き込みアクセス許可の両方をデバイス ハンドルに付与する必要があります。
メジャー コード
入力バッファー
Irp->AssociatedIrp.SystemBuffer のバッファーには、PERSISTENT_RESERVE_COMMAND 構造体が含まれています。 非ページ プールからバッファーを割り当て、ターゲット デバイスとアダプターに対してバッファーを正しく配置する必要があります。
PR_OUT。ServiceAction には、次のいずれかを指定できます。
- RESERVATION_ACTION_REGISTER
- RESERVATION_ACTION_RESERVE
- RESERVATION_ACTION_RELEASE
- RESERVATION_ACTION_CLEAR
- RESERVATION_ACTION_PREEMPT
- RESERVATION_ACTION_PREEMPT_ABORT
- RESERVATION_ACTION_REGISTER_IGNORE_EXISTING
PR_OUT。スコープには、次のいずれかを指定できます。
- RESERVATION_SCOPE_LU
- RESERVATION_SCOPE_ELEMENT
PR_OUT。型には、次のいずれかを指定できます。
- RESERVATION_TYPE_WRITE_EXCLUSIVE
- RESERVATION_TYPE_EXCLUSIVE
- RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS
- RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS
PR_OUT。ParameterList は、PRO_PARAMETER_LIST 構造体を保持するために使用されます。 この構造体は必須であり、PERSISTENT_RESERVE_COMMAND 構造体の残りの部分と連続している必要があります。
入力バッファーの長さ
PERSISTENT_RESERVE_COMMAND 構造体の長さ。
出力バッファー
何一つ。
出力バッファーの長さ
何一つ。
状態ブロック
情報 フィールドは 0 に設定されます。
状態 フィールドは、次のいずれかの値に設定されます。
価値 | 意味 |
---|---|
STATUS_DEVICE_BUSY (ERROR_BUSY) | 予約の競合が原因でコマンドが失敗しました (詳細については、SCSI プライマリ コマンド - 2 (SPC-2) の仕様を参照してください)。 |
STATUS_INFO_LENGTH_MISMATCH | IOCTL の入力バッファーの長さが sizeof(PERSISTENT_RESERVE_COMMAND) より小さいか、PERSISTENT_RESERVE_COMMAND データ構造で指定されているサイズが sizeof(PERSISTENT_RESERVE_COMMAND) 未満です。 |
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) | I/O コントロール コード (IOCTL_STORAGE_PERSISTENT_RESERVE_OUT) は、ストレージ ドライバーではサポートされていません。 |
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) | 入力バッファー構造のサイズが正しくないか、設定されています。 |
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) | 入力バッファーがデバイスまたはアダプターに対して正しくアラインされていません。 この状態は、ドライバーが IOCTL をストレージ スタックに送信した場合にのみ返されます。 I/O Manager によってバッファーが自動的にアラインされるため、ユーザー モード アプリケーションが DeviceIoControl API を介して IOCTL を送信した場合、この状態は返されません。 |
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) | デバイスは、永続的な予約アウト コマンドをサポートしていません。 |
STATUS_SUCCESS | 操作が成功しました。 |
必要条件
要件 | 価値 |
---|---|
ヘッダー | ntddstor.h (Ntddstor.h を含む) |