| Предыдущий | Следующий |
| KERN_SUCCESS |
kOSReturnSuccess
Исследуйте успешную операцию Libkern или IOKit в месте первого возврата, пока оболочка не заменила её общим сообщением. kOSReturnSuccess — нулевое значение успеха семейства OSReturn и IOReturn. Оно подтверждает принятие и завершение синхронного вызова, но само по себе не доказывает завершение последующей асинхронной передачи, уведомления или действия устройства.
Граница контракта
Несколько низкоуровневых API Apple используют ноль как успех, однако каждый typedef относится к отдельному контракту. Тип результата, проверка выходных данных и правила владения ресурсами остаются частью корректной обработки.
kOSReturnSuccess, KERN_SUCCESS и MACH_MSG_SUCCESS численно могут быть равны нулю, но их typedef и владеющие API различаются. Декодируйте ноль по объявленному типу, а не как взаимозаменяемый псевдоним. Сохраняйте значение, тип и первую операцию вместе с kOSReturnSuccess; то же целое число может принадлежать другому пространству статусов в другом API.
Сохраните данные до изменения состояния
| Что сохранить | Диагностическая ценность |
|---|---|
| Объявленный тип результата и точный метод Libkern или IOKit, вернувший ноль. | Определяет конкретный объект и операцию успешного вызова. |
| Поколение IOService, IOUserClient, memory descriptor или command object, участвовавшего в вызове. | Отделяет состояние аргумента или жизненного цикла от нижележащего provider при анализе успешного результата Libkern. |
| Выходные длины, изменения владения и callback завершения, запланированный после синхронного возврата. | Создаёт устойчивое сравнение состояния до и после операции при анализе успешного результата Libkern. |
| Следующее сообщение службы или аппаратное завершение с тем же идентификатором операции. | Показывает, является ли успешный результат первичным или преобразованной сводкой. |
Для успешной операции Libkern или IOKit сохраните объявленный тип и точный метод, вернувший ноль, до переустановки, перезагрузки или очистки состояния. Успех только после такого изменения полезен как сравнительный результат для успешной операции Libkern или IOKit, но не устанавливает исходную причину.
Целевые эксперименты
- Вызовите тот же метод с намеренно неподдерживаемым аргументом и убедитесь, что он возвращает ошибку семейства IOReturn, а не errno. Остальные входные данные оставьте неизменными.
- Сравните синхронное завершение с запросом, документированное завершение которого позднее приходит через callback или сообщение. Запишите первый статус и переход состояния.
- Проверяйте каждый возвращённый объект и выходную длину до использования, даже при нулевом статусе. Изменившийся результат означает новую границу.
Соседние результаты
| Наблюдаемое сравнение | Следующий проверяемый вывод |
|---|---|
| Первая контрольная проверка изменила результат | Сосредоточьтесь на намеренно неподдерживаемом аргументе и принадлежности результата семейству IOReturn. |
| Вторая проверка успешной операции Libkern или IOKit воспроизводит тот же первый статус | Сохраните данные нижележащего provider, драйвера, службы или среды выполнения. Вторая проверка сравнивала синхронный возврат с поздним callback или сообщением. |
| После ограниченного изменения успешный результат сменился другим статусом | После третьей проверки операция перешла к другой границе при анализе успешного результата Libkern. Проверялись возвращённые объекты и выходные длины. Сохраните оба результата и интерпретируйте новый статус по его контракту API при анализе успешного результата Libkern. |
Обоснованное устранение
Целевое исправление. Обрабатывайте успех в рамках контракта IOKit и дожидайтесь документированного асинхронного завершения до освобождения буферов или service objects. Для успешной операции Libkern или IOKit изменяйте только объект, аргумент, политику, provider или состояние жизненного цикла, на которые указывают данные.
Критерий приёмки. API возвращает kOSReturnSuccess, документированные outputs действительны, правила владения соблюдены, а асинхронное завершение приходит ровно один раз для того же запроса. Повторите исходную операцию, давшую успешную операцию Libkern или IOKit с исходной идентичностью и поддерживаемой конфигурацией, затем сохраните одну отрицательную контрольную проверку.
Технические ссылки
Эти источники определяют пространство имён и контракт подсистемы, необходимые для проверки kOSReturnSuccess в используемой версии платформы.
- Apple XNU: определения IOReturn — определяет пространство статусов успешной операции Libkern или IOKit.
- Apple Developer: IOKit — описывает границу API и жизненного цикла.
- Репозиторий исходного кода Apple XNU — предоставляет контекст ABI, реализации и протокола при анализе успешного результата Libkern.
- Apple: обзор программирования Mach и ядра — помогает учитывать ограничения переносимости и проверки.
Нужно найти другой код? Найти другой код состояния или ошибки.