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


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

См. также раздел

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT