次の方法で共有


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_MJ_DEVICE_CONTROL

入力バッファー

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 を含む)