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


Обработка запросов Pass-Through SCSI

Драйвер класса, который создает запрос IOCTL_SCSI_PASS_THROUGH или запрос IOCTL_SCSI_PASS_THROUGH_DIRECT , отвечает за следующее:

  • Установка длины буфера пользователя в Parameters.DeviceIoControl.InputBufferLength как минимум sizeof(SCSI_PASS_THROUGH) или sizeof(SCSI_PASS_THROUGH_DIRECT)

  • Настройка расположения стека ввода-вывода драйвера порта хранилища в обычном режиме

  • Установка параметра MinorFunction в IRP IRP_MJ_DEVICE_CONTROL, что помечает запрос как обработанный драйвером класса хранения.

При получении запроса IOCTL_SCSI_PASS_THROUGH или IOCTL_SCSI_PASS_THROUGH_DIRECT от драйвера более высокого уровня подпрограмма DispatchDeviceControl драйвера класса хранения отвечает за проверку действительности встроенной команды SCSI (CDB) и, если команда действительна для устройства, отправляет запрос драйверу порта хранилища.

Если в расположении стека ввода-вывода драйвера порта для запроса IOCTL_SCSI_PASS_THROUGH или IOCTL_SCSI_PASS_THROUGH_DIRECT не задано поле MinorFunction с IRP_MJ_DEVICE_CONTROL, драйвер порта предполагает, что запрос поступил непосредственно из приложения и что для целевого типа устройства не существует драйвера класса. Отправка такого запроса непосредственно в драйвер порта для устройства, которое было запрошено драйвером класса хранения, является ошибкой приложения.

Драйвер порта не проверка допустимость команды SCSI, внедренной в такой запрос сквозной передачи.