SCSI_PASS_THROUGH結構 (ntddscsi.h)

SCSI_PASS_THROUGH 結構會與 IOCTL_SCSI_PASS_THROUGH 要求搭配使用,以指示埠驅動程式將內嵌的 SCSI 命令傳送至目標裝置。

附註
SCSI 埠驅動程式和 SCSI 迷你埠驅動程式模型未來可能會變更或無法使用。 相反地,我們建議使用 Storport 驅動程式Storport miniport 驅動程式模型。

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