IOCTL_MPIO_PASS_THROUGH_PATH_EX IOCTL (ntddscsi.h)
IOCTL_MPIO_PASS_THROUGH_PATH_EX控制代码请求是IOCTL_MPIO_PASS_THROUGH_PATH请求的扩展版本。 此请求支持双向数据传输,并允许命令数据块 (CDB) > 16 字节。
此 I/O 控制代码允许应用程序或内核驱动程序将 SCSI 命令发送到指定的真实 LUN。 以下限制适用于使用此 I/O 控制代码:
- 如果存在伪 LUN 的类驱动程序,则应用程序必须将请求发送到该类驱动程序。 因此,仅当设备没有类驱动程序时,应用程序才能将此请求直接发送到 MPIO。
- 所有传递请求都必须是同步的。
- 应用程序不需要管理特权来向设备发送直通请求,但它们必须具有对设备的读/写访问权限。
- 请求 包括嵌入SCSI_PASS_THROUGH_EX 结构中的 SCSI 直通请求 () 以及某些指令。
- SCSI 直通结构应满足此类要求,如 SCSI_PASS_THROUGH_EX 中所述。
- 如果要通过声明真实 LUN 的 DSM 发送请求,则必须指示这一点。 在这种情况下,DSM 本身必须指示相同的实际 LUN。 否则,请求将失败。
- 请求必须根据前者的 SCSI 地址或其 MPIO PathId 指定由伪 LUN 组成的真实 LUN,但不能同时指定这两者。
主要代码
输入缓冲区
Parameters.DeviceIoControl.InputBufferLength 指示 Irp-AssociatedIrp.SystemBuffer> 上的缓冲区的大小(以字节为单位)。
输入缓冲区长度
缓冲区的大小必须至少 为 (MPIO_PASS_THROUGH_PATH_EX) 或者,如果由 64 位操作系统中的 32 位应用程序发送, 则 size 为 (MPIO_PASS_THROUGH_PATH32_EX) 。
输出缓冲区
端口驱动程序返回任何请求感知数据和从设备传输到 Irp-AssociatedIrp.SystemBuffer> 缓冲区的任何数据。
输出缓冲区长度
已更新嵌入SCSI_PASS_THROUGH_EX结构中的 SenseInfoLength 和 DataOutTransferLength 成员,以指示传输的数据量。
状态块
“信息”字段设置为 Irp-AssociatedIrp.SystemBuffer> 的输出缓冲区中返回的字节数。 “ 状态” 字段设置为“STATUS_SUCCESS”,如果嵌入SCSI_PASS_THROUGH_EX中的输入 Length 值设置不正确,则可能会STATUS_BUFFER_TOO_SMALL 或STATUS_INVALID_PARAMETER 。
要求
要求 | 值 |
---|---|
Header | ntddscsi.h (包括 Ntddscsi.h) |