| Предыдущий | Следующий |
| NTE_PROVIDER_DLL_FAIL | NTE_BAD_KEYSET_PARAM |
NTE_PROV_DLL_NOT_FOUND
В NTE_PROV_DLL_NOT_FOUND особенно важна область действия: обнаружения поставщика. Windows не смогла разрешить зарегистрированного поставщика в загружаемый модуль для архитектуры вызывающего процесса и текущего контекста установки. Сохраняйте шестнадцатеричное значение 0x8009001E вместе с API, который его вернул, поскольку высокоуровневое ПО может преобразовать его в сообщение, теряющее это различие.
Читайте результат на правильном уровне
При этом результате результат выбирается до получения пригодного контекста поставщика. Отделяйте регистрацию от обычной загрузки DLL: имя CSP/KSP, архитектура процесса, тип поставщика, путь модуля, зависимости и точка входа инициализации — разные факты. Скопированная DLL, которая просто загружается, не доказывает согласованность зарегистрированной установки.
Сформируйте запись инцидента
- 1. Отображаемое имя поставщика и зарегистрированный тип поставщика либо имя KSP
Сравните настроенное имя поставщика с регистрациями, видимыми именно архитектуре сбойного процесса. - 2. Архитектура процесса, путь модуля, версия файла, подписант и сбой зависимого модуля
Проверьте, установлены ли на затронутом компьютере пакет поставщика, зависимая runtime-среда и middleware устройства. - 3. Первый API получения контекста и учётная запись пользователя или службы, которая его вызвала
Соберите диагностику загрузчика до ручного копирования DLL: отсутствие зависимости также может проявляться как проблема загрузки поставщика.
Для обнаружения поставщика эти данные намеренно не содержат секретов: идентификаторов, длин, имён поставщиков, выбранных политик и переходов состояния обычно достаточно без записи закрытых ключей, паролей, PIN или plaintext.
Сопоставьте сбой с изменениями состояния
Для NTE_PROV_DLL_NOT_FOUND, сопоставьте последнюю успешную операцию с установкой или обновлением поставщика, созданием или обновлением ключа, изменениями профиля или сеанса, подключением и отключением устройства, обновлением политик и первым неудачным вызовом. Для этого результата порядок важен: ошибка сразу после миграции ключа указывает на другую границу, чем сбой после смены учётной записи службы.
- Для этого результата подготовьте минимальный пример с именем API, поставщика, ключа или контейнера, флагами и размерами нечувствительных входных данных.
- Для этого пути сохраните события поставщика, устройства, профиля и ОС за период от последнего успеха до первого сбоя.
- Для этого пути сохраните заведомо исправный контрольный результат с той же идентичностью, архитектурой и выбором поставщика.
Используйте две оси сравнения
Используйте заведомо исправного встроенного программного поставщика как контроль, сохраняя ту же операцию и идентичность. Если контроль успешен, исследуйте регистрацию, упаковку, разрядность, зависимости или инициализацию. Если оба пути одинаково завершаются сбоем на том же вводе, сначала проверьте контракт вызывающей стороны, а не заменяйте файлы поставщика.
| Тест | Интерпретация |
|---|---|
| Тот же ввод, заведомо исправный путь | Для обнаружения поставщика успех переносит внимание на выбранного поставщика, политику, устройство, контекст или состояние транзакции. |
| Заведомо исправный ввод, сбойный путь | Для обнаружения поставщика сбой указывает, что среда или выбранный объект самостоятельно не способны выполнить операцию. |
| Исходный путь после одного изолированного изменения | Для обнаружения поставщика это сравнение показывает, устраняет ли предложенное исправление исходное условие. |
Не смешивайте с соседним кодом
NTE_PROVIDER_DLL_FAIL обычно означает, что модуль найден, но не смог инициализироваться; этот код указывает на более ранний этап обнаружения или загрузки. Не исправляйте его копированием произвольной DLL рядом с приложением: это может скрыть проблему регистрации или зависимостей и обойти модель установки и подписи Windows.
Для обнаружения поставщика также сохраняйте исходное числовое значение: соседние константы могут требовать существенно разного восстановления, даже если приложение показывает их все как ошибку аутентификации, сертификата или безопасности.
Проверка после изменения
Для этого результата заново получите поставщика в исходной архитектуре процесса и контексте безопасности, затем выполните одну настоящую операцию с ключом; простой тест загрузки модуля недостаточен. Для NTE_PROV_DLL_NOT_FOUND, сохраните регрессионный тест с нечувствительными идентификаторами и ожидаемыми результатами, включая один отрицательный контроль, который должен по-прежнему завершаться ошибкой.
Технические ссылки
Для NTE_PROV_DLL_NOT_FOUND, эти источники определяют HRESULT и соответствующий интерфейс, протокол или формат данных обнаружения поставщика.
- Открытые спецификации Microsoft: значения HRESULT.
- Microsoft: CryptAcquireContext.
- Microsoft: Cryptographic Service Providers.
Нужно найти другой код? Найти другой код состояния или ошибки.
