| Предыдущий | Следующий |
| MACH_SEND_TOO_LARGE | MACH_SEND_INVALID_HEADER |
MACH_SEND_INVALID_TYPE
Метаданные дескриптора являются частью протокола
MACH_SEND_INVALID_TYPE означает, что ядро отклонило метаданные дескриптора сложного сообщения. Тип определяет, представляет ли элемент тела порт, внешнюю память, массив портов или другую поддерживаемую форму; disposition указывает Mach, какое право или действие копирования применить. Буфер сообщения может выглядеть корректным по байтам, но оставаться недопустимым, если эти поля не описывают поддерживаемую передачу.
Не сводите диагностику только к несовпадению версий сторон. Причиной может быть структура дескриптора с неверным ABI-макетом, отсутствие бита сложного сообщения, неинициализированные поля заполнения или типа либо смешение сгенерированных определений разных версий интерфейса. Ядро могло обработать часть элементов тела до обнаружения неверного.
Практические проверки
- Стройте сложные сообщения из обнулённых типизированных структур, а не вручную по смещениям байтов.
- Проверьте
MACH_MSGH_BITS_COMPLEX, число дескрипторов и поляtypeи disposition каждого дескриптора. - При использовании MIG генерируйте отправителя и получателя из совместимых определений.
- После ошибки отбросьте и заново постройте сложное сообщение перед повтором.
Ссылки
- Исходный код Apple XNU: mach/message.h
- Справочник интерфейса ядра Mach: mach_msg
- Справочник GNU Mach: межпроцессное взаимодействие
Нужно найти другой код? Найти другой код состояния или ошибки.