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