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,並在內嵌命令完成時,以裝置輸出緩存器中的值來更新 CurrentTaskFile。 CurrentTaskFile 中的數位值會對應至下列工作檔案輸出緩存器。
Byte | 輸出快取器 |
---|---|
0 | 錯誤快取器 |
1 | 扇區計數緩存器 |
2 | 扇區號碼快取器 |
3 | 圓柱低快取器 |
4 | 圓柱高緩存器 |
5 | 裝置/前端緩存器 |
6 | 狀態快取器 |
7 | 保留 |
備註
IOCTL_ATA_PASS_THROUGH 是緩衝的裝置控制要求。 若要略過系統記憶體中的緩衝處理,呼叫端應該使用 IOCTL_ATA_PASS_THROUGH_DIRECT 和 ATA_PASS_THROUGH_DIRECT。 處理IOCTL_ATA_PASS_THROUGH_DIRECT要求時,系統會鎖定用戶記憶體中的緩衝區,而裝置會直接存取此記憶體。
規格需求
需求 | 值 |
---|---|
標頭 | ntddscsi.h (包含 Ntddscsi.h) |