共用方式為


ATA_PASS_THROUGH_DIRECT 結構 (ntddscsi.h)

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

語法

typedef struct _ATA_PASS_THROUGH_DIRECT {
  USHORT Length;
  USHORT AtaFlags;
  UCHAR  PathId;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  ReservedAsUchar;
  ULONG  DataTransferLength;
  ULONG  TimeOutValue;
  ULONG  ReservedAsUlong;
  PVOID  DataBuffer;
  UCHAR  PreviousTaskFile[8];
  UCHAR  CurrentTaskFile[8];
} ATA_PASS_THROUGH_DIRECT, *PATA_PASS_THROUGH_DIRECT;

成員

Length

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

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_DIRECT 結構中 PreviousTaskFile 成員的內容應該有效。
ATA_FLAGS_USE_DMA 將傳輸模式設定為 DMA。
ATA_FLAGS_NO_MULTIPLE 僅讀取單一扇區。

PathId

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

TargetId

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

Lun

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

ReservedAsUchar

保留供未來使用。

DataTransferLength

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

TimeOutValue

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

ReservedAsUlong

保留供未來使用。

DataBuffer

資料緩衝區的指標。

PreviousTaskFile[8]

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

CurrentTaskFile[8]

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

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

當IOCTL_ATA_PASS_THROUGH_DIRECT完成時,埠驅動程式會更新 CurrentTaskFile,其輸出中存在的值會在內嵌命令完成時註冊。 CurrentTaskFile 中的數位值會對應至下列工作檔輸出緩存器。

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

備註

ATA_PASS_THROUGH_DIRECT 結構會與 IOCTL_ATA_PASS_THROUGH_DIRECT 搭配使用。 使用此要求時,系統會鎖定用戶記憶體中的緩衝區,而裝置會直接存取此記憶體。 如需此裝置控制要求的雙緩衝對應專案,請參閱 IOCTL_ATA_PASS_THROUGHATA_PASS_THROUGH_EX

規格需求

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

另請參閱

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT