SCSI_PASS_THROUGH_EX 结构 (ntddscsi.h)

SCSI_PASS_THROUGH_EX结构与IOCTL_SCSI_PASS_THROUGH_EX请求结合使用,以指示端口驱动程序将嵌入式 SCSI 命令发送到目标设备。 SCSI_PASS_THROUGH_EX 可以包含双向数据传输和可变长度命令数据块。

注意

SCSI 端口驱动程序和 SCSI 微型端口驱动程序模型将来可能会更改或不可用。 请改用 Storport 驱动程序Storport 微型端口 驱动程序模型。

语法

typedef struct _SCSI_PASS_THROUGH_EX {
  ULONG     Version;
  ULONG     Length;
  ULONG     CdbLength;
  ULONG     StorAddressLength;
  UCHAR     ScsiStatus;
  UCHAR     SenseInfoLength;
  UCHAR     DataDirection;
  UCHAR     Reserved;
  ULONG     TimeOutValue;
  ULONG     StorAddressOffset;
  ULONG     SenseInfoOffset;
  ULONG     DataOutTransferLength;
  ULONG     DataInTransferLength;
  ULONG_PTR DataOutBufferOffset;
  ULONG_PTR DataInBufferOffset;
  UCHAR     Cdb[ANYSIZE_ARRAY];
} SCSI_PASS_THROUGH_EX, *PSCSI_PASS_THROUGH_EX;

成员

Version

此结构的版本。 设置为 0。

Length

此结构的大小(以字节为单位)。 设置为 sizeof(SCSI_PASS_THROUGH_EX)

CdbLength

Cdb 中 SCSI 命令描述符块的大小(以字节为单位)。

StorAddressLength

此结构之后 StorAddressOffset 偏移处的存储设备地址结构的长度(以字节为单位)。

ScsiStatus

报告 HBA 或目标设备返回的 SCSI 状态。

SenseInfoLength

请求感知缓冲区的大小(以字节为单位)。 此成员是可选的,可以设置为 0。

DataDirection

指示 SCSI 命令是读取还是写入数据。 此字段必须是以下值之一:

含义
SCSI_IOCTL_DATA_OUT 将数据写入设备。
SCSI_IOCTL_DATA_IN 从设备读取数据。
SCSI_IOCTL_DATA_UNSPECIFIED 未传输任何数据。
SCSI_IOCTL_DATA_BIDIRECTIONAL 数据对输入和输出都有效。

Reserved

保留。 设置为 0。

TimeOutValue

指示在端口驱动程序认为请求超时之前可以执行的时间间隔(以秒为单位)。

StorAddressOffset

目标存储设备地址结构的位置(以字节为单位),从此结构的开头开始。

SenseInfoOffset

从此结构的开头到请求感知缓冲区的偏移量。 如果没有请求感知缓冲区,则设置为 0。

DataOutTransferLength

指示输出数据缓冲区的大小(以字节为单位)。 许多设备传输预定义长度的数据块。 DataOutTransferLength 中的值必须是设备指定的此预定义最小长度的整数倍。 如果出现不足,微型端口驱动程序必须将此成员更新为实际传输的字节数。 如果没有输出数据缓冲区,则此成员设置为 0。

DataInTransferLength

指示输入数据缓冲区的大小(以字节为单位)。 许多设备传输预定义长度的数据块。 DataInTransferLength 中的值必须是设备指定的此预定义最小长度的整数倍数。 如果出现不足,微型端口驱动程序必须将此成员更新为实际传输的字节数。 如果没有输入数据缓冲区,则此成员设置为 0。

DataOutBufferOffset

包含从此结构的开头到输出数据缓冲区的偏移量。 偏移量必须符合设备的数据对齐要求。

DataInBufferOffset

包含从此结构的开头到输入数据缓冲区的偏移量。 偏移量必须符合设备的数据对齐要求。

Cdb[ANYSIZE_ARRAY]

指定要发送到目标设备的 SCSI 命令描述符块。

注解

SCSI_PASS_THROUGH_EX 结构与IOCTL_SCSI_PASS_THROUGH_EX控制代码一起使用,该代码是缓冲的设备控制请求。 若要绕过系统内存中的缓冲,调用方应使用 IOCTL_SCSI_PASS_THROUGH_DIRECT_EX。 处理 IOCTL_SCSI_PASS_THROUGH_DIRECT_EX 请求时,系统会锁定用户内存中的缓冲区,设备直接访问此内存。

注意

在 64 位版本的 Windows 上执行的驱动程序在处理来自 32 位进程的 IOCTL_SCSI_PASS_THROUGH_EX 请求时,必须使用 SCSI_PASS_THROUGH32_EX 结构作为请求数据类型。

要求

要求
最低受支持的客户端 从Windows 8开始可用。
标头 ntddscsi.h (包括 Ntddscsi.h)

另请参阅

IOCTL_SCSI_PASS_THROUGH

IOCTL_SCSI_PASS_THROUGH_EX

SCSI_PASS_THROUGH