Что означает код возврата ядра macOS 0 (kOSReturnSuccess)?

 
Также может означать:
КонстантаТипОС
ERROR_SUCCESSОшибка WindowsWindows
STATUS_SUCCESSNTSTATUSWindows
STATUS_WAIT_0NTSTATUSWindows
KERN_SUCCESSКод возврата ядра macOSmacOS
MACH_MSG_SUCCESSКод возврата ядра macOSmacOS
ippStsNoErrСтатус Intel IPPЛюбая
S_OKHRESULTWindows
hrNoneHRESULTWindows
Предыдущий Следующий
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, но не устанавливает исходную причину.

Целевые эксперименты

  1. Вызовите тот же метод с намеренно неподдерживаемым аргументом и убедитесь, что он возвращает ошибку семейства IOReturn, а не errno. Остальные входные данные оставьте неизменными.
  2. Сравните синхронное завершение с запросом, документированное завершение которого позднее приходит через callback или сообщение. Запишите первый статус и переход состояния.
  3. Проверяйте каждый возвращённый объект и выходную длину до использования, даже при нулевом статусе. Изменившийся результат означает новую границу.

Соседние результаты

Наблюдаемое сравнениеСледующий проверяемый вывод
Первая контрольная проверка изменила результатСосредоточьтесь на намеренно неподдерживаемом аргументе и принадлежности результата семейству IOReturn.
Вторая проверка успешной операции Libkern или IOKit воспроизводит тот же первый статусСохраните данные нижележащего provider, драйвера, службы или среды выполнения. Вторая проверка сравнивала синхронный возврат с поздним callback или сообщением.
После ограниченного изменения успешный результат сменился другим статусомПосле третьей проверки операция перешла к другой границе при анализе успешного результата Libkern. Проверялись возвращённые объекты и выходные длины. Сохраните оба результата и интерпретируйте новый статус по его контракту API при анализе успешного результата Libkern.

Обоснованное устранение

Целевое исправление. Обрабатывайте успех в рамках контракта IOKit и дожидайтесь документированного асинхронного завершения до освобождения буферов или service objects. Для успешной операции Libkern или IOKit изменяйте только объект, аргумент, политику, provider или состояние жизненного цикла, на которые указывают данные.

Критерий приёмки. API возвращает kOSReturnSuccess, документированные outputs действительны, правила владения соблюдены, а асинхронное завершение приходит ровно один раз для того же запроса. Повторите исходную операцию, давшую успешную операцию Libkern или IOKit с исходной идентичностью и поддерживаемой конфигурацией, затем сохраните одну отрицательную контрольную проверку.

Технические ссылки

Эти источники определяют пространство имён и контракт подсистемы, необходимые для проверки kOSReturnSuccess в используемой версии платформы.


Нужно найти другой код? Найти другой код состояния или ошибки.