IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT_EX IOCTL (ntddscsi.h)

IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT_EX控制代码请求是IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT请求的扩展版本。 此请求支持双向数据传输,并允许命令数据块 (CDB) > 16 字节。

此 I/O 控制代码允许应用程序或内核驱动程序将 SCSI 命令发送到指定的真实 LUN。 以下限制适用于使用此 I/O 控制代码:

  • 如果存在伪 LUN 的类驱动程序,则应用程序必须将请求发送到该类驱动程序。 因此,仅当设备没有类驱动程序时,应用程序才能将此请求直接发送到 MPIO。
  • 所有直通请求都必须是同步的。
  • 应用程序不需要管理特权来向设备发送直通请求,但它们必须具有对设备的读/写访问权限。
  • 请求 包含嵌入式SCSI_PASS_THROUGH_DIRECT 结构) 以及某些指令中的 SCSI 直通请求 (。
  • SCSI_PASS_THROUGH_DIRECT中所述,SCSI 直通结构应满足此类要求。
  • 如果要通过声明真实 LUN 的 DSM 发送请求,则必须指示该请求。 在这种情况下,DSM 本身必须指示相同的实际 LUN。 否则,请求将失败。
  • 请求必须根据前者的 SCSI 地址或其 MPIO PathId 指定由伪 LUN 构成的实际 LUN,但不能同时指定这两者。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

Parameters.DeviceIoControl.InputBufferLength 指示 Irp-AssociatedIrp.SystemBuffer> 处缓冲区的大小(以字节为单位)。

输入缓冲区长度

缓冲区的大小必须至少 (MPIO_PASS_THROUGH_PATH_DIRECT_EX) 或者,如果由 64 位操作系统中的 32 位应用程序发送, 则大小为 (MPIO_PASS_THROUGH_PATH_DIRECT32_EX) 。

输出缓冲区

端口驱动程序返回任何请求感知数据和从设备传输到 Irp-AssociatedIrp.SystemBuffer> 缓冲区的任何数据。

输出缓冲区长度

嵌入式SCSI_PASS_THROUGH_DIRECT_EX结构中的 SenseInfoLengthDataOutTransferLength 将更新,以指示传输的数据量。

状态块

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

要求

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

另请参阅

MPIO_PASS_THROUGH_PATH_DIRECT_EX

SCSI_PASS_THROUGH_DIRECT_EX