| Предыдущий | Следующий |
| NS_E_BKGDOWNLOAD_FAILEDINITIALIZE | NS_E_BKGDOWNLOAD_INVALID_FILE_NAME |
NS_E_INTERFACE_NOT_REGISTERED_IN_GIT
Как исследовать NS_E_INTERFACE_NOT_REGISTERED_IN_GIT
Код 0xC00D126A сужает событие до условия получение COM-интерфейса из Global Interface Table в другом apartment. Рассматривайте этот результат как точную границу сбоя: зафиксируйте API, входные данные и исходный HRESULT для состояния «сбой инициализации подключаемого модуля фоновой загрузки», чтобы подтвердить состояние «сбой инициализации подключаемого модуля фоновой загрузки».
Что выполняет Player
На контрольной точке этот результат диспетчер загрузок Player координирует окно-владельца, подключаемый модуль, идентификатор фонового задания, временные файлы и окончательное завершение либо отмену; после передачи загруженного пакета.wmd добавляются этапы распаковки и каталогизации. Специфичная для страницы граница — получение COM-интерфейса из Global Interface Table в другом apartment.
Получение всех сетевых байтов ещё не означает завершение задания, перемещение временного файла или успешную распаковку и каталогизацию пакета Windows Media Download. Реалистичный сценарий: рабочий поток использует cookie после того, как код завершения отозвал interface.
Что сохранить до изменения состояния
| Диагностические данные | Почему это важно для interface, не зарегистрированного в GIT |
|---|---|
| Объект и операция, вернувшие ошибку | GUID задания и сигнатура Player, состояние BITS/задания, ожидаемое и фактическое число файлов, удалённые и локальные имена, временный путь, запрос завершения/отмены, идентификаторы подключаемого модуля и обратного вызова, COM apartment, результат извлечения WMD и первый нижележащий HRESULT |
| Решающие сведения | GIT cookie, запрошенный IID, последовательность регистрации и отзыва и apartment callback |
| Идентификатор поколения | Зафиксируйте то же поколение disc, device, job или операции Player, которое вернуло этот результат; reconnect или смена носителя создают уже другой тест. |
| Нижележащий результат | Сохраните первый результат device, filesystem, COM, codec, DirectShow, IMAPI или BITS, появившийся до того, как Player сопоставил его с этим результатом. |
| Контролируемое сравнение | Повторите исходный вызов, изменив только это условие: зарегистрировать живой интерфейс до межапартаментного использования и отзывать его только после завершения callbacks. |
Руководство по интерпретации
| Наблюдение | Толкование |
|---|---|
| Зафиксированные значения соответствуют границе | Результат соответствует условию получение COM-интерфейса из Global Interface Table в другом apartment; сначала исправьте его, прежде чем менять несвязанные codec, driver или playlist. |
| Сбой нижнего уровня произошёл до него | Сохраните этот более ранний HRESULT или результат устройства, поскольку он может быть лишь отображением ошибки на уровне Player. |
| Тот же вызов проходит после одного изолированного изменения | Сравнение подтверждает диагностику interface, не зарегистрированного в GIT, а не общий сбой установки. |
| После повторной проверки код изменился | Эта граница пройдена; диагностируйте новый HRESULT как следующую независимую стадию. |
Он сужает границу сбоя до получение COM-интерфейса из Global Interface Table в другом apartment. Его наличие не доказывает общесистемный сбой мультимедиа; перед изменением не связанных компонентов Player определите операцию, которой принадлежит ошибка.
Пятиэтапная изолирующая проверка
- Зафиксируйте
0xC00D126A, он, точную операцию Player/API и первую временную метку её появления. - Сохраните GIT cookie, запрошенный IID, последовательность регистрации и отзыва и apartment callback; сделайте это до извлечения носителя, повторного подключения устройства, отмены задания или пересоздания объекта Player.
- Сопоставьте результат с GUID задания и сигнатурой Player, состоянием BITS и задания, ожидаемым и фактическим числом файлов, удалёнными и локальными именами, временным путём, запросом завершения или отмены, подключаемым модулем и обратным вызовом, apartment COM, результатом распаковки WMD и первым внутренним HRESULT.
- Один раз воспроизведите сбой с исходными source и destination, затем примените только это изменение: зарегистрировать живой интерфейс до межапартаментного использования и отзывать его только после завершения callbacks.
- Создайте новое поколение операции и убедитесь, что исходный вызов проходит рассматриваемую границу.
Другие границы того же семейства
| Связанный результат | Другая диагностическая граница |
|---|---|
NS_E_BKGDOWNLOAD_FAILEDINITIALIZE | запуск общего диспетчера фоновой загрузки и базы данных заданий |
NS_E_BKGDOWNLOAD_INVALID_FILE_NAME | формирование допустимого конечного имени файла для запрошенной загрузки |
NS_E_BKGDOWNLOAD_WMDUNPACKFAILED | распаковка и проверка загруженного пакета.wmd после передачи |
Критерии исправления
Проверка успешна, когда вы зарегистрировали живой interface до межапартаментного использования, отзываете его только после завершения callbacks, пересоздали операцию-владельца и исходный вызов больше не возвращает он.
При проверке он не удаляйте job или временный файл до фиксации его состояния, подписи владельца и списка файлов; completion и cancellation — терминальные операции, их нельзя бездумно повторять.
Время жизни COM apartment является частью сбоя
Pointer, действительный в registering apartment, не заменяет корректный cookie Global Interface Table. Зафиксируйте thread/apartment, вызвавший RegisterInterfaceInGlobal, cookie, запрошенный IID и точку, в которой RevokeInterfaceFromGlobal выполнился. Race при shutdown может сделать более поздний worker callback похожим на отсутствие компонента Player.
Документация
- Интерфейсы BITS и объекты заданий.
- Завершение и отмена задания BITS.
- Возвращаемые значения BITS и ошибки состояния задания.
- Пакеты Windows Media Download.
- Создание глобальной таблицы интерфейсов COM.
Нужно найти другой код? Найти другой код состояния или ошибки.