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


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

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

Примечание

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

Синтаксис

typedef struct _SCSI_PASS_THROUGH_EX {
  ULONG     Version;
  ULONG     Length;
  ULONG     CdbLength;
  ULONG     StorAddressLength;
  UCHAR     ScsiStatus;
  UCHAR     SenseInfoLength;
  UCHAR     DataDirection;
  UCHAR     Reserved;
  ULONG     TimeOutValue;
  ULONG     StorAddressOffset;
  ULONG     SenseInfoOffset;
  ULONG     DataOutTransferLength;
  ULONG     DataInTransferLength;
  ULONG_PTR DataOutBufferOffset;
  ULONG_PTR DataInBufferOffset;
  UCHAR     Cdb[ANYSIZE_ARRAY];
} SCSI_PASS_THROUGH_EX, *PSCSI_PASS_THROUGH_EX;

Члены

Version

Версия этой структуры. Задайте значение 0.

Length

Размер этой структуры в байтах. Задайте значение sizeof(SCSI_PASS_THROUGH_EX).

CdbLength

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

StorAddressLength

Длина (в байтах) структуры адресов запоминающего устройства в смещении StorAddressOffset после этой структуры.

ScsiStatus

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

SenseInfoLength

Размер буфера значения запроса в байтах. Этот элемент является необязательным и может иметь значение 0.

DataDirection

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

Значение Значение
SCSI_IOCTL_DATA_OUT Запись данных на устройство.
SCSI_IOCTL_DATA_IN Чтение данных с устройства.
SCSI_IOCTL_DATA_UNSPECIFIED Данные не передаются.
SCSI_IOCTL_DATA_BIDIRECTIONAL Данные допустимы как для входных, так и для выходных данных.

Reserved

Зарезервировано. Задайте значение 0.

TimeOutValue

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

StorAddressOffset

Расположение структуры адресов целевого устройства хранения в байтах от начала этой структуры.

SenseInfoOffset

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

DataOutTransferLength

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

DataInTransferLength

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

DataOutBufferOffset

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

DataInBufferOffset

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

Cdb[ANYSIZE_ARRAY]

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

Комментарии

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

Примечание

Драйверы, выполняющиеся в 64-разрядной версии Windows, должны использовать структуру SCSI_PASS_THROUGH32_EX в качестве типа данных запроса при обработке запроса IOCTL_SCSI_PASS_THROUGH_EX из 32-разрядного процесса.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Верхняя часть ntddscsi.h (включая Ntddscsi.h)

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

IOCTL_SCSI_PASS_THROUGH

IOCTL_SCSI_PASS_THROUGH_EX

SCSI_PASS_THROUGH