| Предыдущий | Следующий |
| OSS_NULL_FCN | OSS_UNAVAIL_ENCRULES |
OSS_BAD_ENCRULES
OSS_BAD_ENCRULES (0x80093016) — результат OSS ASN.1 runtime для недействительного selector правил кодирования в состоянии runtime control. Объект OssControl содержит неизвестное значение encoding rules, обычно потому, что вызывающий код записал неподдерживаемое значение либо объект повреждён. Поскольку значение rule непосредственно перед вызовом имеют решающее значение для этого условия, диапазон HRESULT Microsoft следует рассматривать вместе с документацией return code OSS Nokalva. Начните исследование с фиксации API, использованный для выбора BER, DER, PER или другого режима, затем отделите закодированное значение от сгенерированных артефактов, аргументов вызова и runtime-пакета, реально загруженного процессом.
Что именно сужает return code
На границе недействительного selector правил кодирования в состоянии runtime control зафиксируйте первую OSS-функцию, вернувшую значение, и отметьте, выполнялись ли encode, decode, copy, compare, constraint validation или настройка trace. Сохраните выбранный PDU, правила кодирования и записи в память control object; иначе внешний certificate/security wrapper может скрыть полезный результат codec за общей ошибкой.
Полезный диагностический набор
| Запишите | Диагностическое значение |
|---|---|
| значение rule непосредственно перед вызовом | Локализует конкретное сообщение, allocation, module или границу API |
| API, использованный для выбора BER, DER, PER или другого режима | Отделяет поведение, зависящее от payload, от состояния сборки и процесса |
| записи в память control object | Делает сравнение воспроизводимым без изменения исходного артефакта |
Соседние статусы
UNAVAIL_ENCRULES обозначает распознанное правило, реализация которого отсутствует; BAD_ENCRULES означает, что сам selector недействителен.
Проверяйте по одной переменной
- задайте rule через документированный API
- инициализируйте новый context с правилами по умолчанию
- проверяйте выбранное rule по закрытому enum
Инструментирование
Записывайте полный 32-битный HRESULT и младший OSS return number вместе с направлением операции, символическим PDU, правилом кодирования, числом байтов и идентификатором generated table. Там, где значение rule непосредственно перед вызовом может раскрывать чувствительные данные, хеш с ограниченным структурным фрагментом безопаснее полного payload. Используйте API, использованный для выбора BER, DER, PER или другого режима вместе с путями и версиями модулей OSS, записанными один раз на процесс, чтобы сопоставлять различия упаковки без засорения обычной диагностики.
При проверке сохраняйте исходные байты или object graph неизменными задайте rule через документированный API. Изменение API, использованный для выбора BER, DER, PER или другого режима после reload, замены plugin, restart или развертывания schema является данными о состоянии runtime, а не основанием выбрасывать reproducer. Когда записи в память control object указывает на конкретное сообщение, сохраняйте криптографический хеш и минимальный безопасный образец вместо записи certificate, subscriber, credential или private-key material.
Матрица решений
| Контролируемое наблюдение | Подтверждаемый вывод |
|---|---|
| задайте rule через документированный API | Изменившийся результат локализует первый предлагаемый контроль вместо слепого повтора |
| значение rule непосредственно перед вызовом различается между успешным и неуспешным случаем | Разница локализует границу недействительного selector правила кодирования в runtime control до изменения несвязанных настроек |
| Независимый decoder принимает тот же артефакт | Проверьте сгенерированную schema, выбранные rules, ABI и необязательные модули OSS, прежде чем объявлять байты недействительными |
| Новый control object изменяет результат | Исследуйте инициализацию, lifecycle, владение allocator, изменение конфигурации и concurrent access |
Проверка исправления
Используйте документированные setters и защищайте context от несинхронизированных или выходящих за границы записей. Тест восстановления для задайте rule через документированный API должен повторять ту же операцию при той же schema и encoding rule, сохранять один намеренно недействительный control и проверять владение/очистку после обоих исходов. Успех после непроанализированного повтора не доказывает, что значение rule непосредственно перед вызовом теперь соответствует контракту codec.
Технические ссылки
- Microsoft: определения HRESULT OSS ASN.1
- OSS Nokalva: return codes encoder/decoder
- OSS Nokalva: runtime-функции и инициализация control
- Соответствующая спецификация ASN.1 или деталь runtime
Нужно найти другой код? Найти другой код состояния или ошибки.
