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_THROUGH 和 ATA_PASS_THROUGH_EX。
規格需求
需求 | 值 |
---|---|
標頭 | ntddscsi.h (包含 Ntddscsi.h) |