| Предыдущий | Следующий |
| kIOReturnNotPrivileged | kIOReturnLockedRead |
kIOReturnBadArgument
Сначала проверьте контракт API, а не оборудование
kIOReturnBadArgument указывает на недопустимый аргумент. Отклонённым входным значением может быть скаляр, длина структуры, адрес, количество, поле, зависящее от селектора, состояние объекта или сочетание значений. Поэтому обычно это нарушение контракта вызывающей стороны, а не доказательство отключения или неисправности целевого устройства.
Сохраните запрос в точности на границе API. В частности, структура с правильным типом C всё равно может быть недопустимой, если её версия, размер, зарезервированные поля, количество или диапазон связанного буфера не соответствуют активному интерфейсу. Этот результат также отличается от kIOReturnBadMessageID и от более конкретной ошибки выравнивания, о которой сообщает kIOReturnNotAligned.
Проверки, помогающие сузить причину
- Проверьте каждый входной диапазон, число байтов, время жизни указателя и предварительные условия, зависящие от селектора.
- Убедитесь, что структуры запроса и ответа соответствуют заголовочным файлам и SDK, с которыми была собрана вызывающая сторона.
- До вызова журналируйте значения и длины полей в обезличенном и воспроизводимом виде.
- Проверьте минимальный документированный запрос, затем добавляйте необязательные поля по одному.
Ссылки
- Исходный код Apple XNU: IOReturn.h
- Apple: архитектурный обзор IOKit
- Apple: управление данными в IOKit
Нужно найти другой код? Найти другой код состояния или ошибки.