IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)

泛型存储类驱动程序(classpnp.sys)公开 I/O 控件(IOCTL)接口,用于发出持久保留 Out 命令。 SCSI 主命令 - 2 (SPC-2) 规范中介绍了接收持久保留 Out 命令时存储设备的行为。 IOCTL 接口要求调用方对持久保留 Out 命令的物理设备具有读/写访问权限。 用户模式应用程序、服务和内核模式驱动程序可以使用此 IOCTL 来控制永久性预留。 如果从驱动程序调用,则必须从 IRQL < DISPATCH_LEVEL 运行的线程调用此 IOCTL。 此 IOCTL 使用FILE_READ_ACCESS和FILE_WRITE_ACCESS定义,要求设备句柄同时具有读取和写入权限才能发出持久保留 Out 命令。

主要代码

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 结构的长度。

输出缓冲区

没有。

输出缓冲区长度

没有。

状态块

信息 字段设置为零。

状态 字段设置为以下值之一。

价值 意义
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 发送到存储堆栈时,才能返回此状态。 当用户模式应用程序通过 DeviceIoControl API 发送 IOCTL 时,不会返回此状态,因为 I/O 管理器会自动对齐缓冲区。
STATUS_IO_DEVICE_ERROR(ERROR_IO_DEVICE) 设备不支持持久保留 Out 命令。
STATUS_SUCCESS 作成功。

要求

要求 价值
标头 ntddstor.h (包括 Ntddstor.h)