共用方式為


ATA_PASS_THROUGH_EX結構 (ntddscsi.h)

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

語法

typedef struct _ATA_PASS_THROUGH_EX {
  USHORT    Length;
  USHORT    AtaFlags;
  UCHAR     PathId;
  UCHAR     TargetId;
  UCHAR     Lun;
  UCHAR     ReservedAsUchar;
  ULONG     DataTransferLength;
  ULONG     TimeOutValue;
  ULONG     ReservedAsUlong;
  ULONG_PTR DataBufferOffset;
  UCHAR     PreviousTaskFile[8];
  UCHAR     CurrentTaskFile[8];
} ATA_PASS_THROUGH_EX, *PATA_PASS_THROUGH_EX;

成員

Length

指定 ATA_PASS_THROUGH_EX 結構的位元組長度。

AtaFlags

指出數據傳輸的方向,並指定要執行的作業種類。 這個成員的值必須是下列旗標的一些組合:

ATA 旗標 意義
ATA_FLAGS_DRDY_REQUIRED 等待裝置的DRDY狀態,再將命令傳送至裝置。
ATA_FLAGS_DATA_IN 從裝置讀取數據。
ATA_FLAGS_DATA_OUT 將數據寫入裝置。
ATA_FLAGS_48BIT_COMMAND 要傳送的 ATA 命令會使用 48 位邏輯區塊位址 (LBA) 功能集。 設定此旗標時,ATA_PASS_THROUGH_EX 結構中 PreviousTaskFile 成員的內容應該有效。
ATA_FLAGS_USE_DMA 將傳輸模式設定為 DMA。
ATA_FLAGS_NO_MULTIPLE 只讀單一扇區。

PathId

包含整數,表示要求的 IDE 埠或總線。 此值是由埠驅動程式所設定。

TargetId

包含整數,表示總線上的目標裝置。 此值是由埠驅動程式所設定。

Lun

指出裝置的邏輯單元編號。 此值是由埠驅動程式所設定。

ReservedAsUchar

保留供未來使用。

DataTransferLength

表示數據緩衝區的大小,以位元組為單位。 如果發生不足狀況,迷你埠驅動程序必須將此成員更新為實際傳輸的位元元組數目。

TimeOutValue

指出在OS特定埠驅動程序判斷要求已逾時之前,允許要求執行的秒數。

ReservedAsUlong

保留供未來使用。

DataBufferOffset

指定從這個 結構開頭到數據緩衝區的位移,以位元組為單位。

PreviousTaskFile[8]

指定目前傳遞命令之前的工作檔案輸入緩存器內容。 未設定ATA_FLAGS_48BIT_COMMAND旗標時,不會使用此成員。

CurrentTaskFile[8]

指定輸入和輸出上工作檔案緩存器的內容。 在輸入時, CurrentTaskFile 中的陣列值會以下列方式對應至工作檔案輸入緩存器。

Byte 輸入快取器
0 功能快取器
1 扇區計數緩存器
2 扇區號碼快取器
3 圓柱低快取器
4 圓柱高緩存器
5 裝置/前端緩存器
6 命令快取器
7 保留
 

IOCTL_ATA_PASS_THROUGH完成時,埠驅動程式會更新 CurrentTaskFile,並在內嵌命令完成時,以裝置輸出緩存器中的值來更新 CurrentTaskFileCurrentTaskFile 中的數位值會對應至下列工作檔案輸出緩存器。

Byte 輸出快取器
0 錯誤快取器
1 扇區計數緩存器
2 扇區號碼快取器
3 圓柱低快取器
4 圓柱高緩存器
5 裝置/前端緩存器
6 狀態快取器
7 保留

備註

IOCTL_ATA_PASS_THROUGH 是緩衝的裝置控制要求。 若要略過系統記憶體中的緩衝處理,呼叫端應該使用 IOCTL_ATA_PASS_THROUGH_DIRECTATA_PASS_THROUGH_DIRECT。 處理IOCTL_ATA_PASS_THROUGH_DIRECT要求時,系統會鎖定用戶記憶體中的緩衝區,而裝置會直接存取此記憶體。

規格需求

需求
標頭 ntddscsi.h (包含 Ntddscsi.h)

另請參閱

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT