Поделиться через


структура 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)

См. также

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT