Команда SC_RESET_DEV
Команда SC_RESET_DEV позволяет в процессе работы послать определенному устройству на шине сигнал сброса, приведя его тем самым в исходное состояние. Структура, описывающая данную команду, называется SRB_BusDeviceReset.
Разберем более подробно поля структуры.
- SRB_Cmd
Это поле должно содержать код команды SC_RESET_DEV.
- SRB_Status
После выполнения команды здесь будет храниться результат вызова функции SendASPI32Command. Ниже приведены возможные значения:
- SS_PENDING — происходит попытка выполнить команду.
- SS_COMP — операция успешно завершена.
- SS_ABORTED — команда SCSI была грубо прервана.
- SS_ABORT_FAIL — не удалось грубо завершить команду.
- SS_ERR — команда SCSI была завершена с ошибкой.
- SS_INVALID_SRB — одно или большее количество полей в структуре SRB_BusDeviceReset были установлены неправильно.
- SS_INVALID_PATH_ID — недопустимые значения идентификатора и (или) логического номера устройства.
- SRB_HaId
Сюда нужно поместить номер выбранного контроллера. Нумерация начинается с 0. Максимальное значение номера контроллера равно 7.
- SRB_Flags
Это поле зарезервировано и должно быть установлено в 0.
- SRB_Hdr_Rsvd
Это поле зарезервировано и должно быть установлено в 0.
- SRB_Target
Сюда помещается идентификатор устройства. Получить это значение можно, используя команду SC_HA_INQUIRY. Нумерация устройств всегда начинается с 0.
- SRB_Lun
Логический адрес устройства. В Win32 это поле игнорируется.
- SRB_HaStat
После удачного завершения команды в это поле будет помещено определенное значение о состоянии контроллера. Вот эти значения.
- HASTAT_OK — контроллер ошибок не обнаружил.
- HASTAT_TIMEOUT — время, отпущенное на выполнение текущей операции, закончилось.
- HASTAT_COMMAND_TIMEOUT — время ожидания обработки данной команды истекло.
- HASTAT_SEL_TO — время обслуживания выбранного устройства вышло.
- HASTAT_MESSAGE_REJECT — при обработке команды контроллером прошло неверное сообщение.
- HASTAT_BUS_RESET — был обнаружен общий сброс шины.
- HASTAT_PARITY_ERROR — была обнаружена ошибка четности.
- HASTAT_REQUEST_SENSE_FAILED — контроллер не сумел правильно обработать данные отчета, полученные от целевого устройства.
- HASTAT_DO_DU — произошло переполнение данных.
- HASTAT_BUS_FREE — неожидаемая очистка шины.
- HASTAT_PHASE_ERR — отказ механизма последовательного распределения идентификаторов на шине.
- SRB_TargStat
После успешного завершения команды SCSI в это поле будет занесено значение состояния, возвращаемого текущим устройством. Не следует обрабатывать это значение, если поле SRB_Status возвратит SS_COMP. Ниже приведены общие случаи возвращаемого значения.
- STATUS_GOOD — данные о состоянии устройства отсутствуют.
- STATUS_CHKCOND — данные о состоянии находятся в поле SenseArea (не обязательно).
- STATUS_BUSY — указанный идентификатор (логический адрес) устройства занят.
- STATUS_RESCONF — возник конфликт резервирования адресов.
- SRB_PostProc
Если установлен флажок SRB_POSTING, в это поле необходимо занести функцию обратного вызова для обработки уведомляющих сообщений интерфейса ASPI. Если установлен флаг SRB_EVENT_NOTIFY, сюда помещается дескриптор пользовательского события для обработки сообщений ASPI. Возвращаемым значением функции SendASPI32Command при выполнении управляющей команды SC_EXEC_SCSI_SMD является SS_PENDING.
К сожалению, в операционных системах Windows 95/98/ME/NT/2000 выполнение команды SC_RESET_DEV может не дать ожидаемого результата. Нет гарантии в правильном выполнении запроса на сброс устройства. Использование команды объясняется требованиями совместимости при переходе от Winl6 на Win32 платформу. Приведем пример использования команды SC_RESET_DEV, В котором посылается команда сброса на устройство под номером 3, расположенном на контроллере под номером 0.Листинг 2.10. Пример использования команды SC_RESET_DEV на Visual C++
Листинг 2.11. Пример использования команды SC_RESET_DEV на Visual Basic
Данный пример кода посылает команду сброса на устройство под номером три, расположенное на контроллере номер 0.
2021-04-01
Google сообщил о запуске проекта Dunant
Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...
подробнее2020-04-06
Новшества в обновленной Windows 10
Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...
подробнее