Site icon EfmSoft

Что означает код HRESULT 0xC00D126A (NS_E_INTERFACE_NOT_REGISTERED_IN_GIT)?

 
Предыдущий Следующий
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 определите операцию, которой принадлежит ошибка.

Пятиэтапная изолирующая проверка

  1. Зафиксируйте 0xC00D126A, он, точную операцию Player/API и первую временную метку её появления.
  2. Сохраните GIT cookie, запрошенный IID, последовательность регистрации и отзыва и apartment callback; сделайте это до извлечения носителя, повторного подключения устройства, отмены задания или пересоздания объекта Player.
  3. Сопоставьте результат с GUID задания и сигнатурой Player, состоянием BITS и задания, ожидаемым и фактическим числом файлов, удалёнными и локальными именами, временным путём, запросом завершения или отмены, подключаемым модулем и обратным вызовом, apartment COM, результатом распаковки WMD и первым внутренним HRESULT.
  4. Один раз воспроизведите сбой с исходными source и destination, затем примените только это изменение: зарегистрировать живой интерфейс до межапартаментного использования и отзывать его только после завершения callbacks.
  5. Создайте новое поколение операции и убедитесь, что исходный вызов проходит рассматриваемую границу.

Другие границы того же семейства

Связанный результатДругая диагностическая граница
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.

Документация


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

Exit mobile version