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 直通请求(在嵌入式 SCSI_PASS_THROUGH_DIRECT 结构中)以及某些指令。
- SCSI 直通结构应满足 SCSI_PASS_THROUGH_DIRECT中所述的要求。
- 如果要通过声明真实 LUN 的 DSM 发送请求,则必须指示该请求。 在这种情况下,DSM 本身必须指示相同的真实 LUN。 否则,请求将失败。
- 请求必须指定由伪 LUN 构成的实际 LUN,这些 LUN 由前者的 SCSI 地址或其 MPIO PathId组成,但不能同时指定这两者。
主要代码
输入缓冲区
Parameters.DeviceIoControl.InputBufferLength 指示缓冲区的大小(以字节为单位)Irp->AssociatedIrp.SystemBuffer。
输入缓冲区长度
缓冲区必须至少 sizeof(MPIO_PASS_THROUGH_PATH_DIRECT_EX),或者(如果缓冲区由 32 位应用程序在 64 位作系统中发送),sizeof(MPIO_PASS_THROUGH_PATH_DIRECT32_EX)。
输出缓冲区
端口驱动程序返回任何请求感知数据和从设备传输到缓冲区的任何数据,Irp->AssociatedIrp.SystemBuffer。
输出缓冲区长度
嵌入式 SCSI_PASS_THROUGH_DIRECT_EX 结构中的 SenseInfoLength 和 DataOutTransferLength 更新,以指示传输的数据量。
状态块
信息 字段设置为 Irp->AssociatedIrp.SystemBuffer输出缓冲区中返回的字节数。 状态 字段设置为STATUS_SUCCESS,或者如果嵌入 SCSI_PASS_THROUGH_DIRECT_EX 中输入 长度 值未正确设置,则设置为STATUS_BUFFER_TOO_SMALL或STATUS_INVALID_PARAMETER。
要求
要求 | 价值 |
---|---|
标头 | ntddscsi.h (包括 Ntddscsi.h) |