структура SCSI_PASS_THROUGH (ntddscsi.h)

Структура SCSI_PASS_THROUGH используется вместе с запросом IOCTL_SCSI_PASS_THROUGH, чтобы указать драйверу порта отправить внедренную команду SCSI на целевое устройство.

Примечание.
В будущем драйвер портов SCSI и модели драйверов мини-порта SCSI могут быть изменены или недоступны. Вместо этого мы рекомендуем использовать драйвера Storport и минипорта Storport модели драйверов.

Структура SCSI_PASS_THROUGH используется вместе с запросом IOCTL_SCSI_PASS_THROUGH, чтобы указать драйверу порта отправить внедренную команду SCSI на целевое устройство.

Синтаксис

typedef struct _SCSI_PASS_THROUGH {
  USHORT    Length;
  UCHAR     ScsiStatus;
  UCHAR     PathId;
  UCHAR     TargetId;
  UCHAR     Lun;
  UCHAR     CdbLength;
  UCHAR     SenseInfoLength;
  UCHAR     DataIn;
  ULONG     DataTransferLength;
  ULONG     TimeOutValue;
  ULONG_PTR DataBufferOffset;
  ULONG     SenseInfoOffset;
  UCHAR     Cdb[16];
} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;

Члены

Length

Содержит значение sizeof(SCSI_PASS_THROUGH).

ScsiStatus

Сообщает состояние SCSI, возвращаемое HBA или целевым устройством.

PathId

Указывает порт SCSI или шину для запроса.

TargetId

Указывает целевой контроллер или устройство на шине.

Lun

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

CdbLength

Указывает размер в байтах блока дескриптора команды SCSI.

SenseInfoLength

Указывает размер в байтах буфера запроса.

DataIn

Указывает, будет ли команда SCSI считывать или записывать данные. Это поле должно иметь одно из трех значений:

Ценность Meaning
SCSI_IOCTL_DATA_OUT (0) Запись данных на устройство
SCSI_IOCTL_DATA_IN (1) Чтение данных с устройства
SCSI_IOCTL_DATA_UNSPECIFIED (2) Направление передачи или передачи данных неизвестно

DataTransferLength

Указывает размер буфера данных в байтах. Многие устройства передают блоки данных предопределенной длины. Значение в DataTransferLength должно быть целой частью этой предопределенной минимальной длины, указанной устройством. При возникновении недозапуска драйвер минипорта должен обновить этот элемент до количества байтов, которые фактически были переданы.

TimeOutValue

Указывает интервал в секундах, когда запрос может выполняться до истечения времени ожидания драйвера порта. Не задайте для этого значения значение 0. Значения по умолчанию часто варьируются от:

  • Типичные операции: от 30 до 60 секунд
  • Короткие операции: от 10 до 30 секунд
  • Средние операции: от 30 до 120 секунд
  • Длинные операции (например, формат, расширенный самостоятельный тест): от 300 до 3600 секунд или более

DataBufferOffset

Содержит смещение от начала этой структуры к буферу данных. Смещение должно учитывать требования к выравниванию данных устройства.

SenseInfoOffset

Смещение от начала этой структуры к буферу запроса.

Cdb[16]

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

Замечания

Структура SCSI_PASS_THROUGH используется с IOCTL_SCSI_PASS_THROUGH, которая представляет собой буферный запрос на управление устройствами. Чтобы обойти буферизацию в системной памяти, вызывающие должны использовать IOCTL_SCSI_PASS_THROUGH_DIRECT. При обработке запроса IOCTL_SCSI_PASS_THROUGH_DIRECT система блокирует буфер в памяти пользователя, а устройство обращается к этой памяти напрямую.

Члены SCSI_PASS_THROUGH соответствуют примерно элементам структуры SCSI_REQUEST_BLOCK. Значения элемента DataIn соответствуют флагам SCSI_IOCTL_DATA_IN, SCSI_IOCTL_DATA_OUT и SCSI_IOCTL_DATA_UNSPECIFIED, назначенным SrbFlags члену SCSI_REQUEST_BLOCK.

Требования

Требование Ценность
заголовка ntddscsi.h (include Ntddscsi.h)

См. также

IOCTL_SCSI_PASS_THROUGH

IOCTL_SCSI_PASS_THROUGH_DIRECT

SCSI_PASS_THROUGH_DIRECT

SCSI_REQUEST_BLOCK