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,但不能同时指定这两者。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

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结构中的 SenseInfoLengthDataOutTransferLength 成员,以指示传输的数据量。

状态块

信息”字段设置为 Irp-AssociatedIrp.SystemBuffer> 的输出缓冲区中返回的字节数。 “ 状态” 字段设置为“STATUS_SUCCESS”,如果嵌入SCSI_PASS_THROUGH_EX中的输入 Length 值设置不正确,则可能会STATUS_BUFFER_TOO_SMALL 或STATUS_INVALID_PARAMETER

要求

要求
Header ntddscsi.h (包括 Ntddscsi.h)

另请参阅

MPIO_PASS_THROUGH_PATH_EX

SCSI_PASS_THROUGH_EX