IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)

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

主要代码

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 结构,并且大小必须至少为 (PRI_REGISTRATION_LIST) 。

对于PR_IN。ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS,输出缓冲区包含 PRI_RESERVATION_LIST 结构,并且大小必须至少为 (PRI_RESERVATION_LIST) 。

如果分配的缓冲区太小,无法返回所有持久保留 In 数据,则将返回成功,并在参数列表 AdditionalLength 字段中返回所需的大小。

输出缓冲区长度

输出缓冲区的长度(以字节为单位)。

状态块

信息” 字段设置为输出缓冲区的大小。 对于 ServiceAction = RESERVATION_ACTION_READ_KEYS,输出缓冲区是 PRI_REGISTRATION_LIST 结构。 对于 ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS,输出缓冲区是 PRI_REGISTRATION_LIST 结构。

状态” 字段设置为下列值之一:

含义
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) 输出缓冲区太小,无法保存永久保留 In 数据。 输出缓冲区的 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 发送到存储堆栈时,才能返回此状态。 当用户模式应用程序通过 DeviceIoControl API 发送 IOCTL 时,不会返回此状态,因为 I/O 管理器会自动对齐缓冲区。
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) 设备不支持“持久保留 In”命令。
STATUS_SUCCESS 操作成功。

要求

要求
Header ntddstor.h (包括 Ntddstor.h)