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_THROUGH 和 SCSI_PASS_THROUGH。
SCSI_PASS_THROUGH_DIRECT的成员大致对应于 SCSI_REQUEST_BLOCK 结构的成员。 DataIn 成员的值对应于分配给 SrbFlags SCSI_REQUEST_BLOCK成员的 SCSI_IOCTL_DATA_IN、SCSI_IOCTL_DATA_OUT 和SCSI_IOCTL_DATA_UNSPECIFIED标志。
要求
| 要求 | 价值 |
|---|---|
| 标头 | ntddscsi.h (包括 Ntddscsi.h) |