Windows Driver Kit: Storage Devices
SCSI_PASS_THROUGH

The SCSI_PASS_THROUGH structure is used in conjunction with an IOCTL_SCSI_PASS_THROUGH request to instruct the port driver to send an embedded SCSI command to the target device.

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;

Members

Length
Contains the value of sizeof(SCSI_PASS_THROUGH).
ScsiStatus
Reports the SCSI status that was returned by the HBA or the target device.
PathId
Indicates the SCSI port or bus for the request.
TargetId
Indicates the target controller or device on the bus.
Lun
Indicates the logical unit number of the device.
CdbLength
Indicates the size in bytes of the SCSI command descriptor block.
SenseInfoLength
Indicates the size in bytes of the request-sense buffer.
DataIn
Indicates whether the SCSI command will read or write data. This field must have one of three values:
Data Transfer TypeMeaning
SCSI_IOCTL_DATA_INRead data from the device.
SCSI_IOCTL_DATA_OUTWrite data to the device.
SCSI_IOCTL_DATA_UNSPECIFIEDNo data is transferred.

DataTransferLength
Indicates the size in bytes of the data buffer. Many devices transfer chunks of data of pre-defined length. The value in DataTransferLength must be an integral multiple of this pre-defined, minimum length that is specified by the device. If an underrun occurs, the miniport driver must update this member to the number of bytes actually transferred.
TimeOutValue
Indicates the interval in seconds that the request can execute before the OS-specific port driver might consider it timed out.
DataBufferOffset
Contains an offset from the beginning of this structure to the data buffer. The offset must respect the data alignment requirements of the device.
SenseInfoOffset
Offset from the beginning of this structure to the request-sense buffer.
Cdb
Specifies the SCSI command descriptor block to be sent to the target device.

Comments

The SCSI_PASS_THROUGH structure is used with IOCTL_SCSI_PASS_THROUGH, which is a buffered device control request. To bypass buffering in system memory, callers should use IOCTL_SCSI_PASS_THROUGH_DIRECT. When handling an IOCTL_SCSI_PASS_THROUGH_DIRECT request, the system locks down the buffer in user memory and the device accesses this memory directly.

The members of SCSI_PASS_THROUGH correspond roughly to the members of a SCSI_REQUEST_BLOCK structure. The values of the DataIn member correspond to the SCSI_IOCTL_DATA_IN, SCSI_IOCTL_DATA_OUT, and SCSI_IOCTL_DATA_UNSPECIFIED flags assigned to SrbFlags member of SCSI_REQUEST_BLOCK.

Requirements

Headers: Declared in ntddscsi.h. Include ntddscsi.h.

See Also

IOCTL_SCSI_PASS_THROUGH, IOCTL_SCSI_PASS_THROUGH_DIRECT, SCSI_PASS_THROUGH_DIRECT, SCSI_REQUEST_BLOCK


Send feedback on this topic
Built on November 19, 2009
Page view tracker