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


структура 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). Если этот флаг задан, содержимое элемента PreviousTaskFile в структуре ATA_PASS_THROUGH_EX должно быть допустимым.
ATA_FLAGS_USE_DMA Задайте для режима передачи значение DMA.
ATA_FLAGS_NO_MULTIPLE Только чтение одного сектора.

PathId

Содержит целое число, указывающее порт интегрированной среды разработки или шину для запроса. Это значение задается драйвером порта.

TargetId

Содержит целое число, указывающее целевое устройство на шине. Это значение задается драйвером порта.

Lun

Указывает логический номер единицы устройства. Это значение задается драйвером порта.

ReservedAsUchar

Зарезервировано для дальнейшего использования.

DataTransferLength

Указывает размер буфера данных в байтах. Если выполняется недостаточное выполнение, мини-драйвер должен обновить этот элемент до количества байтов, которые были фактически переданы.

TimeOutValue

Указывает количество секунд, разрешенных для выполнения запроса, прежде чем драйвер порта для конкретной ОС определяет время ожидания запроса.

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 (include Ntddscsi.h)

См. также

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT