структура 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 сопоставляют входные регистры следующим образом.
Байт | Входной регистр |
---|---|
0 | Регистрация компонентов |
1 | Регистр счетчика секторов |
2 | Регистр номера сектора |
3 | Цилиндр низкий регистр |
4 | Высокий регистр цилиндров |
5 | Регистрация устройства или головы |
6 | Регистрация команд |
7 | Скрытный |
По завершении IOCTL_ATA_PASS_THROUGH_DIRECT драйвер портов обновляет CurrentTaskFile значениями, которые присутствуют в выходных регистрах устройства при завершении внедренной команды. Значения массива в CurrentTaskFile соответствуют следующим регистрам выходных данных файла задач.
Байт | Регистрация выходных данных |
---|---|
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 (include Ntddscsi.h) |