Что означает код HRESULT 0x80090036 (NTE_USER_CANCELLED)?

 
Предыдущий Следующий
NTE_DEVICE_NOT_FOUND NTE_PASSWORD_CHANGE_REQUIRED

NTE_USER_CANCELLED

В NTE_USER_CANCELLED особенно важна область действия: отменённого взаимодействия с поставщиком. Поставщик прекратил работу, потому что пользователь закрыл или отклонил запрос согласия, PIN, выбора сертификата, биометрической проверки или защиты ключа. Сохраняйте шестнадцатеричное значение 0x80090036 вместе с API, который его вернул, поскольку высокоуровневое ПО может преобразовать его в сообщение, теряющее это различие.

Где выбирается это состояние

При этом результате поставщик требует или попытался выполнить шаг присутствия пользователя. Различайте контракт silent-вызова, недоступный интерактивный рабочий стол, явную отмену пользователем и политику поставщика, ограничивающую операцию активной консолью. В unattended-программе они могут выглядеть одинаково, но исправляются по-разному.

Данные, которые меняют диагноз

  1. 1. Silent- и UI-флаги, использованные при открытии поставщика или ключа
    Отличите сознательную отмену от запроса, показанного на недоступном рабочем столе и завершившегося по тайм-ауту.
  2. 2. ID сеанса, desktop, состояние активной консоли, идентичность службы и факт фактического показа запроса
    Зафиксируйте сеанс и путь UI поставщика, но не запускайте скрытый цикл повторов с постоянным повторным показом запроса.
  3. 3. Политика ключа или устройства, требующая согласия, ввода PIN, биометрической проверки или выбора сертификата
    Предложите понятное действие для повтора и сохраняйте состояние операции только если API это разрешает.

Для отменённого взаимодействия эти данные намеренно не содержат секретов: идентификаторов, длин, имён поставщиков, выбранных политик и переходов состояния обычно достаточно без записи закрытых ключей, паролей, PIN или plaintext.

Сопоставьте сбой с изменениями состояния

Для NTE_USER_CANCELLED, сопоставьте последнюю успешную операцию с установкой или обновлением поставщика, созданием или обновлением ключа, изменениями профиля или сеанса, подключением и отключением устройства, обновлением политик и первым неудачным вызовом. При этом результате порядок важен: ошибка сразу после миграции ключа указывает на другую границу, чем сбой после смены учётной записи службы.

  • Для этого результата подготовьте минимальный пример с именем API, поставщика, ключа или контейнера, флагами и размерами нечувствительных входных данных.
  • Для этого пути сохраните события поставщика, устройства, профиля и ОС за период от последнего успеха до первого сбоя.
  • Для этого пути сохраните заведомо исправный контрольный результат с той же идентичностью, архитектурой и выбором поставщика.

Контролируемое воспроизведение

Один раз выполните ту же операцию в интерактивном консольном сеансе с разрешённым UI поставщика и один раз — в целевом unattended-контексте, не меняя ключ и поставщика. Разница показывает, пригоден ли объект сам по себе, но ограничен политикой присутствия пользователя.

ТестИнтерпретация
Тот же ввод, заведомо исправный путьДля отменённого взаимодействия с поставщиком успех переносит внимание на выбранного поставщика, политику, устройство, контекст или состояние транзакции.
Заведомо исправный ввод, сбойный путьДля отменённого взаимодействия с поставщиком сбой указывает, что среда или выбранный объект самостоятельно не способны выполнить операцию.
Исходный путь после одного изолированного измененияДля отменённого взаимодействия с поставщиком это сравнение показывает, устраняет ли предложенное исправление исходное условие.

Соседние результаты и вводящие в заблуждение исправления

Считать это неверным паролем неправильно: поставщик сообщает, что взаимодействие не было завершено. Автоматизация или подавление окна PIN/согласия не эквивалентны подготовке ключа для unattended-использования. Не ослабляйте политику присутствия пользователя без подтверждения требований безопасности.

Для отменённого взаимодействия с поставщиком также сохраняйте исходное числовое значение: соседние константы могут требовать существенно разного восстановления, даже если приложение показывает их все как ошибку аутентификации, сертификата или безопасности.

Что считается реальным исправлением

Операция должна завершаться в реальном контексте развёртывания с ключом, чья политика взаимодействия соответствует этому контексту, сохраняя запросы пользователя там, где его одобрение входит в проект. Для NTE_USER_CANCELLED, сохраните регрессионный тест с нечувствительными идентификаторами и ожидаемыми результатами, включая один отрицательный контроль, который должен по-прежнему завершаться ошибкой.

Технические ссылки

Для NTE_USER_CANCELLED, эти источники определяют HRESULT и соответствующий интерфейс, протокол или формат данных отменённого взаимодействия с поставщиком.


Нужно найти другой код? Найти другой код состояния или ошибки.