Команда SC_ABORT_SRB
Для чего используется данная команда? Если был послан запрос устройству или ожидался ответ, но вдруг стало необходимо оборвать связь и вернуться в программу, надо выполнить команду SC_ABORT_SRB. Но, хотелось бы подчеркнуть, что, выполняя команду SC_ABORT_SRB, мы только запрашиваем интерфейс ASPI на возможность разрыва. Запрос может быть выполнен, а может остаться без внимания. Поэтому не стоит полагаться на эту команду, как на панацею от неправильной (некорректной) работы с оборудованием. Можно вызывать эту команду управления и перед выходом из программы.
Теперь разберем каждое поле структуры более подробно.
- SRB_Cmd
Сюда заносим код команды SC_ABORT_SRB.
- SRB_Status
После выполнения команды здесь будет храниться результат вызова функции SendASPI32Command. Возможные значения могут быть следующие:
- SS_COMP — говорит о завершении команды без ошибок, но не указывает на то, что связь с текущим устройством была успешно разорвана. Для получения подтверждения разрыва связи необходимо проверить значение SS_ABORTED.
- SS_INVALID_HA — попытка использовать недопустимый (пустой) номер контроллера.
- SS_INVALID_SRB — одно или более полей структуры SRB_Abort установлены неверно.
- SS_ABORTED — попытка оборвать обмен данными с устройством успешно завершена. Только получив это значение, можно надеяться на успешный разрыв связи.
- SRB_HaId
Сюда нужно поместить номер выбранного контроллера. Нумерация начинается с 0. Максимальное значение номера контроллера равно 7.
- SRB_Flags
Это поле не используется и сюда следует поместить 0.
- SRB_Hdr_Rsvd
Это поле зарезервировано и сюда следует поместить 0.
- SRB_ToAbort
В это поле надо занести указатель на структуру команды, которую требуется прервать.
По завершении выполнения команды SC_ABORT_SRB функция обработки запросов ASPI sendASPI32command возвратит одно из значений: SS__COMP, SS_INVALID_HA, SS_INVALID_SRB. Если программа инициировала разрыв связи, будет возвращено значение SS_ABORTED. He стоит повторять описание этих значений, поскольку оно фактически полностью совпадает с ранее означенным. Приведем простой пример использования команды SC_ABORT_SRB, который демонстрирует как разорвать связь с зависшим устройством.
Листинг 2.8. Пример использования команды SC_ABORT_SRB на Visual C++
Пример для Visual Basic выглядит тоже достаточно просто:
Листинг 2.9. Пример использования команды SC_ABORT_SRB на Visual Basic
Как видите, работа с командой SC_ABORT_SRB не представляет особой сложности, поэтому переходим к следующей команде.
2021-04-01
Google сообщил о запуске проекта Dunant
Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...
подробнее2020-04-06
Новшества в обновленной Windows 10
Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...
подробнее