| Предыдущий | Следующий |
| NTE_INVALID_PARAMETER | NTE_NOT_SUPPORTED |
NTE_BUFFER_TOO_SMALL
NTE_BUFFER_TOO_SMALL указывает на сбой на этапе определения размера вывода. Целевой буфер не вмещает результат или значение свойства; обычно это происходит, если вызывающая сторона пропустила запрос требуемого размера или использовала устаревшую длину после изменения параметров. Диагностируйте определение размера вывода в первом компоненте, вернувшем значение, а не в последнем слое интерфейса: последующая очистка и резервные попытки могут породить другие вторичные ошибки.
Читайте результат на правильном уровне
При этом результате многие криптографические API Windows используют предоставленные вызывающей стороной байтовые буферы со строгими правилами размеров и aliasing. Ёмкость, единицы байт/символ, двухпроходные запросы размера, увеличение из-за padding и допустимые схемы in-place входят в контракт вызова. Исследуйте диапазоны адресов и длины, а не только равенство указателей или номинальный размер массива.
Сформируйте запись инцидента
- Базовые адреса входного и выходного буферов, длины в байтах и занимаемые каждым диапазоны
Вызовите API в документированном режиме запроса размера и сохраните возвращённое число байтов.
Для этого результата это позволяет отличить недостаточную ёмкость от перекрытия диапазонов памяти. - Размер, возвращённый проходом запроса размера, и все параметры, изменённые перед проходом с данными
Различайте количество символов и байтов и учитывайте завершающие символы только там, где это требует API.
При этом результате это выявляет устаревшие значения длины после изменения параметров или состояния ключа. - Алгоритм, режим, padding, tag, свойства и специфичные для поставщика правила in-place
Не предполагайте, что размер прежнего ciphertext, подписи, key blob или свойства остаётся верным для нового алгоритма или ключа.
При этом результате это показывает, поддерживает ли поставщик предлагаемую схему in-place.
Сохраните цепочку доказательств
Для NTE_BUFFER_TOO_SMALL, сопоставьте последнюю успешную операцию с установкой или обновлением поставщика, созданием или обновлением ключа, изменениями профиля или сеанса, подключением и отключением устройства, обновлением политик и первым неудачным вызовом. Для этого результата порядок важен: ошибка сразу после миграции ключа указывает на другую границу, чем сбой после смены учётной записи службы.
- Для этого результата подготовьте минимальный пример с именем API, поставщика, ключа или контейнера, флагами и размерами нечувствительных входных данных.
- Для этого пути сохраните события поставщика, устройства, профиля и ОС за период от последнего успеха до первого сбоя.
- Для этого пути сохраните заведомо исправный контрольный результат с той же идентичностью, архитектурой и выбором поставщика.
Используйте две оси сравнения
При этом результате выделите отдельные входной и выходной буферы по последнему размеру, возвращённому с тем же ключом и набором параметров. Сохраните исходный ввод, выполните операцию один раз и сравните сообщённые длины. Поведение in-place проверяйте только если API явно его документирует.
| Тест | Интерпретация |
|---|---|
| Тот же ввод, заведомо исправный путь | Для определения размера вывода успех переносит внимание на выбранного поставщика, политику, устройство, контекст или состояние транзакции. |
| Заведомо исправный ввод, сбойный путь | Для определения размера вывода сбой указывает, что среда или выбранный объект самостоятельно не способны выполнить операцию. |
| Исходный путь после одного изолированного изменения | Для определения размера вывода это сравнение показывает, устраняет ли предложенное исправление исходное условие. |
Не смешивайте с соседним кодом
В отличие от NTE_BUFFERS_OVERLAP, этот результат относится к ёмкости, а не к aliasing диапазонов источника и назначения. Больший буфер не устраняет запрещённое перекрытие, а раздельные буферы не исправляют недостаточную ёмкость. Не меняйте обе гипотезы одновременно в одном тесте.
Для определения размера вывода также сохраняйте исходное числовое значение: соседние константы могут требовать существенно разного восстановления, даже если приложение показывает их все как ошибку аутентификации, сертификата или безопасности.
Проверка после изменения
Для этого результата исправление требует корректных диапазонов и размеров в байтах для конкретного алгоритма и поставщика, включая повторные вызовы, где длина вывода меняется из-за padding или закодированного содержимого. Для NTE_BUFFER_TOO_SMALL, сохраните регрессионный тест с нечувствительными идентификаторами и ожидаемыми результатами, включая один отрицательный контроль, который должен по-прежнему завершаться ошибкой.
Технические ссылки
Для NTE_BUFFER_TOO_SMALL, эти источники определяют HRESULT и соответствующий интерфейс, протокол или формат данных определения размера вывода.
- Открытые спецификации Microsoft: значения HRESULT.
- Microsoft: функции хранилища ключей CNG.
- Microsoft: функции примитивной криптографии CNG.
Нужно найти другой код? Найти другой код состояния или ошибки.
