Что означает код HRESULT 0xC00D272A (NS_E_DRM_ACTION_NOT_QUERIED)?

 
Предыдущий Следующий
NS_E_DRM_ALREADY_INDIVIDUALIZED NS_E_DRM_ACQUIRING_LICENSE

NS_E_DRM_ACTION_NOT_QUERIED

Что именно изолирует этот HRESULT

Символьный результат NS_E_DRM_ACTION_NOT_QUERIED сужает значение 0xC00D272A сужает причину до проверки действительности лицензии, прав и применения политики. На практике приложение пытается выполнить защищённое действие, не проверив предварительно, разрешает ли его лицензия; ошибка возникает на этапе оценки, который сопоставляет лицензию с защищённым содержимым и решает, разрешено ли действие с учётом сроков, счётчиков, уровня безопасности приложения, регистрации устройства и ограничений вывода.

Для NS_E_DRM_ACTION_NOT_QUERIED, встроенное сообщение описывает видимый пользователю результат, а символьная фраза «action not queried» точно обозначает границу WMDRM. Для доказательства причины зафиксируйте последовательность проверки действия и результат API, который должен был предшествовать выполнению.

Какой компонент владеет сбоем

Не сводите NS_E_DRM_ACTION_NOT_QUERIED к общей ошибке DRM. Наличие лицензии не означает, что разрешена любая операция: права и ограничения оцениваются для конкретного действия. Кроме того, одно содержимое может иметь несколько лицензий, поэтому диагностика должна определить лицензию, фактически выбранную компонентом DRM.

Диагностические данные, разделяющие причины

Зафиксируйте первое появление NS_E_DRM_ACTION_NOT_QUERIED до того, как автоматическая повторная попытка, завершение Player, восстановление хранилища или повторное получение лицензии изменят состояние. Минимальный полезный набор данных включает:

  • Доказательство конкретного кода: последовательность проверки действия и результат API, который должен был предшествовать выполнению.
  • Защищённая идентичность: запрошенное действие: воспроизведение, копирование, запись на диск или перенос.
  • Состояние операции: идентификатор лицензии, KID и идентичность заголовка содержимого.
  • Сохранение состояния или транспорт: время начала действия, срок истечения и показания защищённых часов.
  • Контекст безопасности: уровень безопасности приложения и требуемая защита выхода.
  • Точка корреляции: оставшиеся счётчики, состояние регистрации устройства и отзыва.

При расследовании условия «action not queried» по возможности используйте KID, идентификаторы лицензий, хэши, отпечатки сертификатов, размеры и временные метки. При диагностике NS_E_DRM_ACTION_NOT_QUERIED не помещайте ключи содержимого, полные данные лицензий, пароли, файлы cookie или расшифрованные медиаданные в обычные журналы.

Как доказать условие

  1. Начните с 0xC00D272A и сопоставьте его с первым объектом WMDRM, который его вернул.
  2. Для NS_E_DRM_ACTION_NOT_QUERIED, разделите данные заголовка и содержимого, сведения о лицензии, состоянии компьютера или устройства и данные службы или сети вокруг условия «action not queried».
  3. Перед повторной попыткой для NS_E_DRM_ACTION_NOT_QUERIED проверьте, не выполнялась ли другая операция с тем же защищённым состоянием и не могла ли предыдущая попытка частично зафиксировать результат.
  4. Для NS_E_DRM_ACTION_NOT_QUERIED зафиксируйте последовательность проверки действия и результат API, который должен был предшествовать выполнению.
  5. Примените минимальное поддерживаемое исправление: запросите разрешение действия и ограничения до запуска защищённой операции; не сбрасывайте несвязанное защищённое состояние.

Что должно изменить поддерживаемое исправление

Поддерживаемое исправление для NS_E_DRM_ACTION_NOT_QUERIED узкое: запросить действие и ограничения до запуска защищённой операции. После устранения NS_E_DRM_ACTION_NOT_QUERIED повторно откройте или создайте объект, которому принадлежало условие «action not queried», чтобы кэшированное состояние сбойного экземпляра не было принято за результат исправления.

Характерный случай: пользовательский проигрыватель начинает воспроизведение, не завершив предварительную проверку прав.

Распространённые, но небезопасные действия

  • Не считайте каждый отказ политики повреждением файла или отсутствием кодека. Это меняет диагностические данные, не объясняя причину NS_E_DRM_ACTION_NOT_QUERIED.
  • Не изменяйте системное время и не обходите защиту выхода, чтобы лицензия с ограничением по времени или безопасности выглядела действительной. Для NS_E_DRM_ACTION_NOT_QUERIED такой обход может создать вторую проблему с хранилищем, идентичностью или политикой.
  • Не сводите NS_E_DRM_ACTION_NOT_QUERIED к записи «DRM failed» в телеметрии; сохраняйте HRESULT, символьное имя, операцию и идентичность объекта.

Не объединяйте эти HRESULT

РезультатДругая граница
NS_E_DRM_NO_RIGHTSВыбранная лицензия не предоставляет действие, запрошенное вызывающей стороной.
NS_E_DRM_LICENSE_UNUSABLEЛицензия недействительна; обратитесь за помощью к поставщику содержимого.
NS_E_DRM_CACHED_CONTENT_ERRORWindows Media DRM не может воспроизвести защищённый файл, поскольку отсутствуют необходимые права.

Одному происшествию с условием «action not queried» могут сопутствовать несколько значений. Упорядочьте NS_E_DRM_ACTION_NOT_QUERIED по времени и отдайте приоритет первому коду, полученному на самой низкой конкретной границе, а не более позднему сводному сообщению Player.

Как убедиться, что исправление действительно

Корректный регрессионный тест для NS_E_DRM_ACTION_NOT_QUERIED содержит два сценария: один намеренно вызывает попытку защищённого действия до проверки разрешения лицензии, второй применяет целевое исправление. Для NS_E_DRM_ACTION_NOT_QUERIED сравните порядок обратных вызовов, выбранную лицензию и KID, итоговое решение о правах и сохранённое состояние; исчезновение одного диалогового окна не доказывает исправление.

Практическое примечание для этого кода

Символьная фраза «action not queried» — важный ключ поиска и телеметрии для NS_E_DRM_ACTION_NOT_QUERIED. Храните её рядом с точным значением 0xC00D272A; официальное сообщение о невозможности выполнить действие полезно пользователю, но само по себе не определяет API-источник, поколение объекта или защищённую идентичность.

Технические ссылки


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