| Предыдущий | Следующий |
| OSS_OUT_MEMORY | OSS_LIMITED |
OSS_PDU_MISMATCH
OSS_PDU_MISMATCH (0x80093009) — результат OSS ASN.1 runtime для wire tag, выбирающего другой ASN.1 type. При decoding тип, определённый по BER или XML markup, не соответствует object type, который вызывающий код попросил декодировать. Поскольку ожидаемое имя PDU и selector имеют решающее значение для этого условия, диапазон HRESULT Microsoft следует рассматривать вместе с документацией return code OSS Nokalva. Начните исследование с фиксации фактический outer tag, namespace или XML element, затем отделите закодированное значение от сгенерированных артефактов, аргументов вызова и runtime-пакета, реально загруженного процессом.
С чем не следует путать это состояние
PDU_RANGE означает недействительный числовой selector; PDU_MISMATCH может использовать допустимый selector, который просто не соответствует байтам.
Найдите точную границу codec
На границе wire tag, выбирающего другой ASN.1 type зафиксируйте первую OSS-функцию, вернувшую значение, и отметьте, выполнялись ли encode, decode, copy, compare, constraint validation или настройка trace. Сохраните выбранный PDU, правила кодирования и schema producer и encoding rule; иначе внешний certificate/security wrapper может скрыть полезный результат codec за общей ошибкой.
Данные, которые стоит сохранить
| Запишите | Диагностическое значение |
|---|---|
| ожидаемое имя PDU и selector | Локализует конкретное сообщение, allocation, module или границу API |
| фактический outer tag, namespace или XML element | Отделяет поведение, зависящее от payload, от состояния сборки и процесса |
| schema producer и encoding rule | Делает сравнение воспроизводимым без изменения исходного артефакта |
При проверке сохраняйте исходные байты или object graph неизменными декодируйте через правильный top-level dispatcher. Изменение фактический outer tag, namespace или XML element после reload, замены plugin, restart или развертывания schema является данными о состоянии runtime, а не основанием выбрасывать reproducer. Когда schema producer и encoding rule указывает на конкретное сообщение, сохраняйте криптографический хеш и минимальный безопасный образец вместо записи certificate, subscriber, credential или private-key material.
Контролируемое воспроизведение
- декодируйте через правильный top-level dispatcher
- сравните первый tag с заведомо корректным сообщением
- проверьте, что payload routing не отправил один класс сообщений в decoder другого класса
Матрица решений
| Контролируемое наблюдение | Подтверждаемый вывод |
|---|---|
| декодируйте через правильный top-level dispatcher | Изменившийся результат локализует первый предлагаемый контроль вместо слепого повтора |
| ожидаемое имя PDU и selector различаются между успешным и неуспешным случаем | Разница локализует wire tag, выбирающий другой ASN.1 type, до изменения несвязанных настроек |
| Независимый decoder принимает тот же артефакт | Проверьте сгенерированную schema, выбранные rules, ABI и необязательные модули OSS, прежде чем объявлять байты недействительными |
| Новый control object изменяет результат | Исследуйте инициализацию, lifecycle, владение allocator, изменение конфигурации и concurrent access |
Инструментирование
Записывайте полный 32-битный HRESULT и младший OSS return number вместе с направлением операции, символическим PDU, правилом кодирования, числом байтов и идентификатором generated table. Там, где ожидаемое имя PDU и selector может раскрывать чувствительные данные, хеш с ограниченным структурным фрагментом безопаснее полного payload. Используйте фактический outer tag, namespace или XML element вместе с путями и версиями модулей OSS, записанными один раз на процесс, чтобы сопоставлять различия упаковки без засорения обычной диагностики.
Критерии завершения
Исправьте routing или выбранный top-level type, затем протестируйте все варианты сообщений, допустимые на этом channel. Тест восстановления для декодируйте через правильный top-level dispatcher должен повторять ту же операцию при той же schema и encoding rule, сохранять один намеренно недействительный control и проверять владение/очистку после обоих исходов. Успех после непроанализированного повтора не доказывает, что ожидаемое имя PDU и selector теперь соответствует контракту codec.
Технические ссылки
- Microsoft: определения HRESULT OSS ASN.1
- OSS Nokalva: return codes encoder/decoder
- OSS Nokalva: runtime-функции и инициализация control
- Соответствующая спецификация ASN.1 или деталь runtime
Нужно найти другой код? Найти другой код состояния или ошибки.
