共用方式為


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 中的陣列值 會以下列方式對應至工作檔案輸入緩存器。

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

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

位元組 輸出快取器
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