| Предыдущий | Следующий |
| NTE_PROV_DLL_NOT_FOUND | NTE_FAIL |
NTE_BAD_KEYSET_PARAM
Этот HRESULT указывает на сбой на этапе выбора контейнера ключа. Параметр keyset или контейнера несовместим с поставщиком, областью, именем ключа или операцией, запрошенной вызывающей стороной. Диагностируйте выбор контейнера в первом компоненте, вернувшем значение, а не в последнем слое интерфейса: последующая очистка и резервные попытки могут породить другие вторичные ошибки.
Начните с API, вернувшего результат
Поставщик уже достигнут, но при этом результате запрос не соответствует контракту выбора контейнера, установки свойства или передачи структуры, специфичной для операции. Рассматривайте имена, флаги области, спецификации ключа, размеры структур, допустимость NULL и состояние создания как одну транзакцию, а не исследуйте только самый заметный аргумент.
Матрица диагностических данных
- Все флаги и размеры структур на границе API, вернувшего результат
Записывайте все флаги keyset и параметры поставщика, а не только имя контейнера.
При этом результате это определяет границу неправильного выбора или свойства. - Поставщик, имя контейнера или ключа, область пользователя или компьютера и намерение создать либо открыть
Проверьте область пользователя/компьютера, намерение создать/открыть и поддержку поставщиком запрошенной спецификации ключа.
При этом результате это выявляет различия области и состояния объекта, скрытые удобным интерфейсом приложения. - Тот же вызов, сохранённый для успешного запроса к тому же поставщику
Сравните сбойный вызов с успешным запросом, выполненным той же идентичностью к тому же поставщику.
Это не позволяет принять успешный резервный путь за исправление этого состояния.
Что включать в пакет для эскалации
Сопоставьте последнюю успешную операцию с установкой или обновлением поставщика, созданием или обновлением ключа, изменениями профиля или сеанса, подключением и отключением устройства, обновлением политик и первым неудачным вызовом. Для этого результата порядок важен: ошибка сразу после миграции ключа указывает на другую границу, чем сбой, появившийся после смены учётной записи службы.
- Для этого результата подготовьте минимальный пример с именем API, поставщика, ключа или контейнера, флагами и размерами нечувствительных входных данных.
- Для этого пути сохраните события поставщика, устройства, профиля и ОС за период от последнего успеха до первого сбоя.
- Для этого пути сохраните заведомо исправный контрольный результат с той же идентичностью, архитектурой и выбором поставщика.
Минимальная последовательность теста
При этом результате создайте минимальный вызов с явным выбором поставщика и свежим непроизводственным объектом. Добавляйте по одному флагу или свойству до повторного появления состояния. Это покажет, относится ли сбой к выбору, состоянию объекта или одному необязательному параметру, не разрушая исходный keyset.
- Сохраните исходный ввод, идентичность, выбор поставщика или протокола и первое возвращённое значение для этого результата.
- Используйте один заведомо исправный контроль, меняющий только подозреваемую часть пути выбора контейнера ключа.
- Где это безопасно, выполните обратное сравнение с заведомо исправным вводом на том же сбойном слое.
- Фиксируйте место первого расхождения в пути выбора контейнера, а не оценивайте только итоговое сообщение приложения.
Границы этого HRESULT
Не сводите этот результат к отсутствующему ключу. этот результат относится к форме запроса, тогда как результаты missing-container означают, что объект не найден. Создание нового ключа под другой учётной записью может скрыть симптом, одновременно изменив поставщика, область, ACL и идентичность объекта. Это обходной путь, а не диагноз исходного контракта.
Для выбора контейнера также сохраняйте исходное числовое значение: соседние константы могут требовать существенно разного восстановления, даже если приложение показывает их все как ошибку аутентификации, сертификата или безопасности.
Критерии закрытия проблемы
Исходный объект должен открываться или настраиваться документированным набором параметров в требуемой области, без скрытого перехода к другому поставщику или вновь созданному контейнеру при этом результате. Сохраните регрессионный тест с нечувствительными идентификаторами и ожидаемыми результатами, включая один отрицательный контроль, который должен по-прежнему завершаться ошибкой.
Технические ссылки
Эти источники определяют HRESULT и соответствующий интерфейс, протокол или формат данных выбора контейнера ключа.
- Открытые спецификации Microsoft: значения HRESULT.
- Microsoft: CryptAcquireContext.
- Microsoft: CNG Key Storage Providers.
Нужно найти другой код? Найти другой код состояния или ошибки.
