структура 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). Если этот флаг установлен, содержимое элемента PreviousTaskFile в структуре ATA_PASS_THROUGH_DIRECT должно быть допустимым. |
ATA_FLAGS_USE_DMA | Установите режим передачи DMA. |
ATA_FLAGS_NO_MULTIPLE | Чтение только для одного сектора. |
PathId
Содержит целое число, указывающее порт или шину интегрированной среды разработки для запроса. Это значение задается драйвером порта.
TargetId
Содержит целое число, указывающее целевое устройство в шине. Это значение задается драйвером порта.
Lun
Указывает логический номер устройства. Это значение задается драйвером порта.
ReservedAsUchar
Зарезервировано для последующего использования.
DataTransferLength
Указывает размер буфера данных (в байтах). Если происходит недостаточное выполнение, драйвер мини-порта должен обновить этот элемент до количества фактически переданных байтов.
TimeOutValue
Указывает время выполнения запроса в секундах до того, как драйвер порта операционной системы определит, что истекло время ожидания запроса.
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) |