SCSI_PASS_THROUGH_DIRECT结构 (ntddscsi.h)

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

注意

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

语法

typedef struct _SCSI_PASS_THROUGH_DIRECT {
  USHORT Length;
  UCHAR  ScsiStatus;
  UCHAR  PathId;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  CdbLength;
  UCHAR  SenseInfoLength;
  UCHAR  DataIn;
  ULONG  DataTransferLength;
  ULONG  TimeOutValue;
  PVOID  DataBuffer;
  ULONG  SenseInfoOffset;
  UCHAR  Cdb[16];
} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;

成员

Length

包含 sizeof (SCSI_PASS_THROUGH_DIRECT) 的值。

ScsiStatus

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

PathId

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

TargetId

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

Lun

指示设备的逻辑单元号。

CdbLength

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

SenseInfoLength

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

DataIn

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

数据传输类型 含义
SCSI_IOCTL_DATA_IN 从设备读取数据。
SCSI_IOCTL_DATA_OUT 将数据写入设备。
SCSI_IOCTL_DATA_UNSPECIFIED 未传输任何数据。

DataTransferLength

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

TimeOutValue

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

DataBuffer

指向数据缓冲区的指针。

SenseInfoOffset

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

Cdb[16]

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

注解

SCSI_PASS_THROUGH_DIRECT 结构与 IOCTL_SCSI_PASS_THROUGH_DIRECT 一起使用。 通过此请求,系统锁定用户内存中的缓冲区,设备直接访问此内存。 有关此设备控制请求的双缓冲等效项,请参阅 IOCTL_SCSI_PASS_THROUGHSCSI_PASS_THROUGH

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

要求

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

另请参阅

IOCTL_SCSI_PASS_THROUGH

IOCTL_SCSI_PASS_THROUGH_DIRECT

SCSI_PASS_THROUGH

SCSI_REQUEST_BLOCK