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_DIRECT 和 ATA_PASS_THROUGH_DIRECT。 處理IOCTL_ATA_PASS_THROUGH_DIRECT要求時,系統會鎖定用戶記憶體中的緩衝區,而裝置會直接存取此記憶體。
要求
要求 | 價值 |
---|---|
標頭 | ntddscsi.h (包括 Ntddscsi.h) |