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) |