Что означает код HRESULT 0x000D0001 (NS_S_CALLABORTED)?

 
Предыдущий Следующий
NS_S_CALLPENDING NS_S_STREAM_TRUNCATED

NS_S_CALLABORTED

Операция Windows Media была прервана клиентом

NS_S_CALLABORTED — HRESULT 851969 (0x000D0001) из Windows Media. AllStat описывает его как «Запрошенная операция была прервана клиентом». Бит severity не указывает на сбой, однако значение сообщает конкретное состояние и не должно сводиться к обычному S_OK.

В устаревшем конвейере Windows Media или состоянии Player этот статус означает, что запрошенная операция была прервана клиентом. Для этого статуса принимать результат можно по фактическому состоянию и выходным данным, а не только по сброшенному биту severity.

Где встречается этот статус

  • Этот статус может возвращаться в callbacks источника, reader, writer или renderer Windows Media; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.
  • Этот статус может возвращаться при автоматизации через Windows Media Player SDK; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.
  • Этот статус может возвращаться в состояниях media graph, playlist, image, rights или buffering; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.

Поскольку этот статус является информационным статусом, языковая оболочка может показать его как успех и скрыть символическое различие. Сохраняйте исходный HRESULT, пока не отработана ветвь, специфичная для этого кода.

Что должно быть истинно перед принятием результата

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

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

Данные и телеметрия

  • Для этого статуса сохраните действие клиента, запросившее прерывание.
  • Для этого статуса сохраните идентификатор операции.
  • Для этого статуса сохраните число обработанных байтов или samples.
  • Для этого статуса сохраните временные артефакты.
  • Для этого статуса сохраните состояние объекта после отмены.

Также зафиксируйте ns_s_callaborted_operation, ns_s_callaborted_state_before, ns_s_callaborted_state_afterвремя UTC, идентификаторы процесса и потока, версию компонента и correlation ID. При журналировании этого статуса удаляйте секретные данные, но сохраняйте стабильные идентификаторы и хэши, необходимые для корреляции.

Последовательность диагностики

  • Зафиксируйте исходное значение 0x000D0001 до того, как оболочки, знаковое десятичное форматирование, исключения или общая обработка успеха заменят исходный статус.
  • Определите операцию, вернувшую этот статус, включая интерфейс или callback, сборку компонента, поток, процесс и фазу машины состояний.
  • Для этого статуса докажите решающее условие: отмена была запрошена правильным действием клиента, а частичные побочные эффекты согласованы.
  • Проверьте каждый выходной параметр, счётчик, массив статусов, буфер, callback, состояние задачи, временную метку медиа, голос транзакции или security token, остающийся частью контракта этого статуса.
  • Сравните состояние непосредственно до и после этого статуса; success severity не гарантирует завершения необязательной работы или высокоуровневого действия, которого ожидал вызывающий код.
  • Воспроизведите этот статус на минимальном входе, сохраняющем то же условие, затем измените только зафиксированную причину и повторите операцию.

Правильная обработка и восстановление

Перестаньте ждать обычного завершения, освободите временные ресурсы и удалите частичный результат. Запускайте заново из чистого состояния только если пользователь снова запросил операцию.

Повторяйте операцию только после изменения документированного входа или состояния. Не повторяйте немедленно NS_S_CALLABORTED если то же стабильное состояние снова даст тот же информационный результат.

Отличие от соседних результатов

Этот статус нужно отличать от обычного S_OK и от значений того же семейства API, у которых бит severity указывает на сбой; документированное состояние определяет следующее действие.

Различие для этого статуса определяет, должен ли вызывающий код остановиться, ждать, использовать результат или изменить состояние.

Практический сценарий

Пользователь отменяет открытие сетевого медиа. Приложение закрывает сетевой reader, очищает временный буфер и оставляет элемент playlist доступным для последующей повторной попытки.

Регрессионный тест должен воспроизвести этот статус, проверить соответствующие выходные данные и состояние, затем изменить только решающее условие и убедиться в ожидаемом соседнем результате или обычном завершении.

Рекомендации разработчикам и администраторам

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

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

Ссылки


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