Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Структура 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) |