| Предыдущий | Следующий |
| NTE_NO_MORE_ITEMS | NTE_DECRYPTION_FAILURE |
NTE_BUFFERS_OVERLAP
Этот HRESULT указывает на сбой на этапе наложения входного и выходного буферов. Поставщик обнаружил, что диапазоны исходной и целевой памяти перекрываются способом, запрещённым выбранной криптографической операцией. Диагностируйте это в первом компоненте, вернувшем значение, а не в последнем UI-слое: последующая очистка и резервные попытки могут породить другие вторичные ошибки.
Найдите первую сбойную границу
При этом результате многие криптографические API Windows используют предоставленные вызывающей стороной байтовые буферы со строгими правилами размера и aliasing. Ёмкость, единицы байт/символ, двухпроходные запросы размера, расширение из-за padding и допустимые схемы in-place входят в контракт вызова. Исследуйте диапазоны адресов и длины, а не только равенство указателей или номинальный размер массива.
Полезные наблюдения вместо общих журналов
- Базовые адреса входного и выходного буферов, длины в байтах и занимаемые каждым диапазоны
Вычисляйте именно байтовые диапазоны для каждого входного и выходного буфера, а не только сравнивайте указатели.
Для этого результата это позволяет отличить недостаточную ёмкость от перекрытия диапазонов памяти. - Размер, возвращённый проходом запроса размера, и все параметры, изменённые перед проходом с данными
Проверьте поддержку in-place для конкретного алгоритма, режима, padding и поставщика.
При этом результате это выявляет устаревшие размеры после изменения параметров или состояния ключа. - Алгоритм, режим, padding, tag, свойства и специфичные для поставщика правила in-place
Используйте раздельные буферы либо документированную схему in-place и сохраните исходный ввод для сравнения.
При этом результате это показывает, поддерживает ли поставщик предлагаемую схему in-place.
Что включать в пакет для эскалации
Сопоставьте последнюю успешную операцию с установкой или обновлением поставщика, созданием или обновлением ключа, изменениями профиля или сеанса, подключением и отключением устройства, обновлением политик и первым неудачным вызовом. Для этого результата порядок важен: ошибка сразу после миграции ключа указывает на другую границу, чем сбой после смены учётной записи службы.
- Для этого результата подготовьте минимальный пример с именем API, поставщика, ключа или контейнера, флагами и размерами нечувствительных входных данных.
- Для этого пути сохраните события поставщика, устройства, профиля и ОС за период от последнего успеха до первого сбоя.
- Для этого пути сохраните заведомо исправный контрольный результат с той же идентичностью, архитектурой и выбором поставщика.
Воспроизведение без разрушительной очистки
При этом результате выделите отдельные входной и выходной буферы по последнему размеру, полученному с тем же ключом и набором параметров. Сохраните исходные данные, выполните операцию один раз и сравните сообщённые длины. Поведение in-place проверяйте только если API явно его документирует.
- Сохраните исходный ввод, идентичность, выбор поставщика или протокола и первое возвращённое значение для этого результата.
- Используйте один заведомо исправный контроль, меняющий только подозреваемую часть пути наложения входного и выходного буферов.
- Где это безопасно, выполните обратное сравнение с заведомо исправным вводом на том же сбойном слое.
- Фиксируйте место первого расхождения в этом пути, а не оценивайте только итоговое сообщение приложения.
Чем это отличается от похожих сбоев
Буфер может быть достаточно большим и всё равно завершиться здесь сбоем. NTE_BUFFER_TOO_SMALL относится к ёмкости, а этот код — к расположению памяти. Увеличение буфера не устраняет запрещённое перекрытие, а раздельные буферы не исправляют недостаточную ёмкость. Не смешивайте эти гипотезы в одном тесте.
Для наложения буферов также сохраняйте исходное числовое значение: соседние константы могут требовать существенно разного восстановления, даже если приложение показывает их все как ошибку аутентификации, сертификата или безопасности.
Регрессионная проверка
Для этого результата исправление требует корректных диапазонов и размеров в байтах для конкретного алгоритма и поставщика, включая повторные вызовы, где длина вывода меняется из-за padding или закодированного содержимого. Сохраните регрессионный тест с нечувствительными идентификаторами и ожидаемыми результатами, включая один отрицательный контроль, который должен по-прежнему завершаться ошибкой.
Технические ссылки
Эти источники определяют HRESULT и соответствующий интерфейс, протокол или формат данных для правил наложения входного и выходного буферов.
- Открытые спецификации Microsoft: значения HRESULT.
- Microsoft: функции хранилища ключей CNG.
- Microsoft: функции примитивной криптографии CNG.
Нужно найти другой код? Найти другой код состояния или ошибки.
