SCSI_PASS_THROUGH结构(ntddscsi.h)

SCSI_PASS_THROUGH结构与 IOCTL_SCSI_PASS_THROUGH 请求结合使用,以指示端口驱动程序将嵌入式 SCSI 命令发送到目标设备。

注释
将来可能会更改 SCSI 端口驱动程序和 SCSI 微型端口驱动程序模型或不可用。 相反,我们建议使用 Storport 驱动程序Storport 微型端口 驱动程序模型。

SCSI_PASS_THROUGH结构与 IOCTL_SCSI_PASS_THROUGH 请求结合使用,以指示端口驱动程序将嵌入式 SCSI 命令发送到目标设备。

语法

typedef struct _SCSI_PASS_THROUGH {
  USHORT    Length;
  UCHAR     ScsiStatus;
  UCHAR     PathId;
  UCHAR     TargetId;
  UCHAR     Lun;
  UCHAR     CdbLength;
  UCHAR     SenseInfoLength;
  UCHAR     DataIn;
  ULONG     DataTransferLength;
  ULONG     TimeOutValue;
  ULONG_PTR DataBufferOffset;
  ULONG     SenseInfoOffset;
  UCHAR     Cdb[16];
} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;

成员

Length

包含 sizeof(SCSI_PASS_THROUGH)的值。

ScsiStatus

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

PathId

指示请求的 SCSI 端口或总线。

TargetId

指示总线上的目标控制器或设备。

Lun

指示设备的逻辑单元号。

CdbLength

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

SenseInfoLength

指示请求感知缓冲区的大小(以字节为单位)。

DataIn

指示 SCSI 命令是读取还是写入数据。 此字段必须具有三个值之一:

价值 Meaning
SCSI_IOCTL_DATA_OUT (0) 将数据写入设备
SCSI_IOCTL_DATA_IN (1) 从设备读取数据
SCSI_IOCTL_DATA_UNSPECIFIED (2) 没有数据传输或传输方向未知

DataTransferLength

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

TimeOutValue

指示请求可以在端口驱动程序将其超时之前执行的间隔(以秒为单位)。不要将此值设置为 0。 默认值通常介于:

  • 典型作:30 到 60 秒
  • 短作:10 到 30 秒
  • 中等作:30 到 120 秒
  • 长作(如格式、扩展自测试):300 到 3600 秒以上

DataBufferOffset

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

SenseInfoOffset

从此结构的开头偏移到请求感知缓冲区。

Cdb[16]

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

言论

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

SCSI_PASS_THROUGH的成员大致对应于 SCSI_REQUEST_BLOCK 结构的成员。 DataIn 成员的值对应于分配给 SrbFlags SCSI_REQUEST_BLOCK成员的 SCSI_IOCTL_DATA_IN、SCSI_IOCTL_DATA_OUT 和SCSI_IOCTL_DATA_UNSPECIFIED标志。

要求

要求 价值
标头 ntddscsi.h (包括 Ntddscsi.h)

另请参阅

IOCTL_SCSI_PASS_THROUGH

IOCTL_SCSI_PASS_THROUGH_DIRECT

SCSI_PASS_THROUGH_DIRECT

SCSI_REQUEST_BLOCK