| Предыдущий | Следующий |
| kIOReturnCannotLock | kIOReturnNotReadable |
kIOReturnNotOpen
Нарушена предварительная стадия жизненного цикла
kIOReturnNotOpen означает, что целевой объект не может принять операцию, поскольку не был открыт в соответствии с требуемым жизненным циклом интерфейса. В IOKit открытие и закрытие не являются формальностью: они устанавливают владение, выделяют или резервируют состояние и позволяют провайдеру решить, может ли клиент обращаться к службе.
Ошибка часто возникает после неправильной очистки, использования объекта после закрытия, проигнорированного неудачного открытия или повторного подключения устройства, аннулировавшего ранее открытый интерфейс. Повторное открытие допустимо только после подтверждения, что объект всё ещё относится к текущему экземпляру устройства. Использование устаревшего дескриптора службы после отключения и повторного перечисления может превратить простую ошибку жизненного цикла в вводящие в заблуждение последующие сбои.
Что нужно проверить
- Проверяйте результат каждого вызова открытия, захвата и настройки до планирования ввода-вывода.
- Сосредоточьте владение открытым состоянием в одном компоненте и сделайте закрытие идемпотентным на уровне приложения.
- После удаления или сброса аннулируйте старый интерфейс и повторите обнаружение перед новым открытием.
- Журналируйте идентификатор клиента и переходы жизненного цикла, а не только последний вызов ввода-вывода, вернувший этот статус.
Ссылки
- Справочник Apple по IOReturn.h
- Основы Apple IOKit: обзор архитектуры
- Apple: работа с интерфейсами USB-устройств
Нужно найти другой код? Найти другой код состояния или ошибки.
