次の方法で共有


IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)

汎用ストレージ クラス ドライバー (classpnp.sys) は、永続予約出力コマンドを発行するための I/O コントロール (IOCTL) インターフェイスを公開します。 永続予約出力コマンドを受信したときの記憶装置の動作については、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 マネージャーがバッファーを自動的に配置するときに、ユーザー モード アプリケーションが DeviceIoControl API を介して IOCTL を送信する場合には返されません。
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) デバイスは、永続予約出力コマンドをサポートしていません。
STATUS_SUCCESS 操作に成功しました。

要件

要件
Header ntddstor.h (Ntddstor.h を含む)