| Предыдущий | Следующий |
| NS_E_WMP_PLUGINDLL_NOTFOUND | NS_E_WMPOCX_PLAYER_NOT_DOCKED |
NS_E_NEED_TO_ASK_USER
Как классифицировать этот результат WMP
Windows Media Player сообщает, что NS_E_NEED_TO_ASK_USER (0xC00D0FDA) возвращается, когда операция дошла до точки политики или выбора, требующей интерактивного ввода пользователя. Условием необходимости запроса пользователя управляет core, который разрешает Player.URL, выбирает или строит playback graph, выбирает codecs и devices, выполняет preroll media и переходит между playlist items, сообщая об асинхронных ошибках.
Сгенерированная часть страницы What Is уже показывает стандартное описание AllStat для него. Дополнительная проверка этого условия — зафиксировать ожидающий вопрос, владеющий UI thread, видимость host и факт подавления запроса silent mode; эти данные полезнее переустановки Player или одновременного изменения нескольких несвязанных настроек.
Порядок расследования
- Сохраните
0xC00D0FDA, контекст ErrorItem и поколение объекта, связанное с необходимостью запроса пользователя. - Сравните сбойный артефакт этого условия с заведомо рабочим, отличающимся только подозреваемым свойством.
- Разделяйте acquisition, parsing, построение объекта, playback и persistence, пока не будет определён владелец условия необходимости запроса пользователя.
- Проверьте условие напрямую: зафиксируйте ожидающий вопрос, владеющий UI thread, видимость host и факт подавления запроса silent mode.
- После предоставления пользователю документированного выбора или явной host policy вместо угадывания значения по умолчанию пересоздайте владеющий объект WMP и убедитесь, что исправленное поколение завершается.
Сопутствующее состояние WMP
Для этого условия URL, playlist item, выбранный source, graph и codec — разные объекты; сбой одного из них нельзя диагностировать одновременной заменой всех. Кроме того, пути Error и MediaError могут ставить в очередь несколько результатов, поэтому первый конкретный HRESULT и его error context полезнее последнего диалога.
Характерный случай необходимости запроса пользователя: Встроенный или unattended host запускает действие, которое полный Player разрешил бы через диалог подтверждения. Этот пример локализует формирующую границу, не предполагая одновременный сбой library, codec stack, skin engine и ActiveX host.
Входные данные, различающие причины
Сохраните первый этот результат до того, как retry или fallback изменит данные об этом условии. Следующие поля должны относиться к одному поколению объекта:
| Поле | Что записать |
|---|---|
| Решающая проверка | зафиксируйте ожидающий вопрос, владеющий UI thread, видимость host и факт подавления запроса silent mode |
| Идентичность артефакта | идентичность audio/video device и поколение driver для воспроизведения этого условия |
| Состояние среды выполнения | упорядоченную очередь ErrorItem с errorCode, errorContext и media object для воспроизведения этого условия |
| Ответственный объект | Player.URL, текущий media sourceURL и разрешённый final URL для воспроизведения этого условия |
| Результат нижнего уровня | play state и переход непосредственно перед сбоем для воспроизведения этого условия |
| Корреляция | идентичность и версию выбранного graph/source/filter или codec для воспроизведения этого условия |
Логи этого случая должны сохранять точные paths или URLs, hashes, object IDs, offsets и порядок HRESULT, где это применимо. Они не должны содержать учётные данные, protected-license payloads или постороннее содержимое library для состояния «операция дошла до точки политики или выбора, требующей интерактивного ввода пользователя».
Не смешивайте с соседними результатами
| Результат | Другая граница |
|---|---|
NS_E_WMP_MLS_STALE_DATA | чувствительные ко времени данные Media Library Service больше не согласуются с часами компьютера или ожидаемым окном актуальности |
NS_E_NO_ERROR_STRING_FOUND | подсистема ошибок имеет HRESULT, но для него отсутствует локализованная строка описания |
NS_E_DEVICE_NOT_READY | указанное device присутствует или выбрано, но не готово к запрошенной операции |
Если этот результат сопровождается более общим результатом «cannot play», «cannot load» или «operation failed», сохраняйте более раннее событие необходимости запроса пользователя. Более поздний код может быть следствием wrapper, fallback item или UI layer, а не исходного сбоя при проверке «операция дошла до точки политики или выбора, требующей интерактивного ввода пользователя».
Проверка после исправления
Сохраните один fixture, воспроизводящий 0xC00D0FDA и один исправленный fixture, меняющий только предусловие этого условия. Исправление завершено, когда требуемая операция выполняется успешно и не заменяется соседним HRESULT WMP.
Что должно изменить настоящее исправление
Изменяйте ответственное предусловие, а не маскируйте симптом: предоставьте пользователю документированный выбор или задайте явную host policy вместо угадывания значения по умолчанию. Retry имеет смысл только после изменения зафиксированного условия.
- Не устанавливайте широкие codec packs до определения запрошенного media subtype и отсутствующего component; это может уничтожить артефакт или состояние, необходимое для объяснения этот результат.
- Не очищайте error queue и не переходите к другому playlist item до сохранения первого сбойного media object; это может заменить исходный HRESULT вторичной ошибкой другого уровня при проверке «операция дошла до точки политики или выбора, требующей интерактивного ввода пользователя».
Практическое замечание для этого кода
Используйте этот результат, 0xC00D0FDA и фразу «need to ask user» вместе в traces и поиске инцидентов. Храните эти ключи рядом с producing API, object ID, URL или file offset, чтобы событие оставалось отличимым от общего сообщения Player для состояния «операция дошла до точки политики или выбора, требующей интерактивного ввода пользователя».
Технические ссылки
- SDK Windows Media Player — контекст API или формата для него.
- Событие MediaError Player — документация для определения границы, формирующей он.
- Объект ErrorItem — нормативный или платформенный материал, относящийся к нему.
- Поддерживаемые протоколы и типы файлов — контекст API или формата для него.
Нужно найти другой код? Найти другой код состояния или ошибки.
