次の方法で共有


IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)

汎用ストレージ クラス ドライバー (classpnp.sys) は、永続予約コマンドを発行するための I/O コントロール (IOCTL) インターフェイスを公開します。 永続予約コマンドを受信したときのストレージ デバイスの動作については、SCSI プライマリ コマンド - 2 (SPC-2) 仕様を参照してください。 IOCTL インターフェイスでは、呼び出し元が永続予約コマンドの物理デバイスへの読み取りアクセス権を持っている必要があります。 ユーザー モード アプリケーション、サービス、カーネル モード ドライバーは、この IOCTL を使用して永続的な予約を制御できます。 ドライバーから呼び出される場合は、IRQL < DISPATCH_LEVELで実行されているスレッドからこの IOCTL を呼び出す必要があります。 この IOCTL は FILE_READ_ACCESSで定義され、永続的な予約コマンドを発行するための読み取りアクセス許可を持つデバイス ハンドルが必要です。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

Irp-AssociatedIrp.SystemBuffer> のバッファーには、PERSISTENT_RESERVE_COMMAND構造体が含まれています。 非ページ プールからバッファーを割り当てる必要があり、ターゲット デバイスとアダプターに合わせて正しく調整する必要があります。

PR_IN。ServiceAction には、次のいずれかを指定できます。

  • RESERVATION_ACTION_READ_KEYS
  • RESERVATION_ACTION_READ_RESERVATIONS

PR_IN。割り当て長は、返されたパラメーター リストに割り当てられたバッファーのサイズ (バイト単位) です。

入力バッファーの長さ

入力バッファーの長さ (バイト単位)。

出力バッファー

PR_INの場合。ServiceAction = RESERVATION_ACTION_READ_KEYS、出力バッファーには PRI_REGISTRATION_LIST 構造体が含まれており、少なくとも sizeof(PRI_REGISTRATION_LIST) である必要があります。

PR_INの場合。ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS、出力バッファーには PRI_RESERVATION_LIST 構造体が含まれており、少なくとも sizeof(PRI_RESERVATION_LIST) である必要があります。

割り当てられたバッファーが小さすぎてすべての永続予約データを返すには、成功が返され、パラメーター リスト AdditionalLength フィールドに必要なサイズが返されます。

出力バッファーの長さ

出力バッファーの長さ (バイト単位)。

ステータス ブロック

[ 情報 ] フィールドは、出力バッファーのサイズに設定されます。 ServiceAction = RESERVATION_ACTION_READ_KEYSの場合、出力バッファーは PRI_REGISTRATION_LIST 構造体です。 ServiceAction = RESERVATION_ACTION_READ_RESERVATIONSの場合、出力バッファーは PRI_REGISTRATION_LIST 構造体です。

[状態] フィールドは、次のいずれかに設定されます。

意味
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) 出力バッファーが小さすぎて、永続予約イン データを保持できません。 出力バッファーの AdditionalLength フィールドには、返されるデータのサイズが含まれます。
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_IN) は、ストレージ ドライバーではサポートされていません。
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 を含む)