Что означает код HRESULT 0x000D0000 (NS_S_CALLPENDING)?

 
Предыдущий Следующий
CRYPT_I_NEW_PROTECTION_REQUIRED NS_S_CALLABORTED

NS_S_CALLPENDING

Операция Windows Media остаётся в состоянии ожидания

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

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

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

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

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

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

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

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

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

  • Для NS_S_CALLPENDINGсохраните идентичность операции и объекта.
  • Для NS_S_CALLPENDINGсохраните регистрацию callback или события.
  • Для NS_S_CALLPENDINGсохраните текущий URL медиа.
  • Для NS_S_CALLPENDINGсохраните время начала ожидания.
  • Для NS_S_CALLPENDINGсохраните итоговый статус завершения.

Также зафиксируйте ns_s_callpending_operation, ns_s_callpending_state_before, ns_s_callpending_state_afterвремя UTC, идентификаторы процесса и потока, версию компонента и correlation ID. Телеметрия для NS_S_CALLPENDING не должна содержать учётные данные, но должна сохранять несекретные идентификаторы объектов и сведения о версиях.

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

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

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

Не используйте окончательные выходные данные и не выдавайте конфликтующие вызовы. Отслеживайте завершение, отмену и timeout через тот объект Windows Media, который запустил операцию.

Повторяйте NS_S_CALLPENDING только после изменения документированного входа или состояния. Неизменный повтор после NS_S_CALLPENDING полезен только если API документированно продвигается по состояниям при повторных вызовах.

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

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

Правильное отделение NS_S_CALLPENDING от соседних значений выбирает корректный путь продолжения и cleanup.

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

Открытие сетевого источника возвращает pending. Player сохраняет объект источника и включает элементы управления воспроизведением только после события open-complete.

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

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

Когда NS_S_CALLPENDING проходит через границы COM, RPC, managed code, scripting или logging, сохраняйте беззнаковое 32-битное значение. Тесты должны проверять постусловие, закодированное в NS_S_CALLPENDINGа не только то, что бит severity означает успех.

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

Ссылки


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