Коды ошибок устройства

Методы InvokeAction и QueryStateVariable возвращают значения HRESULT, которые могут указывать на ошибку устройства (то есть ошибку, полученную с устройства, сертифицированного UPnP). Если ошибка получена от устройства, метод (InvokeAction или QueryStateVariable) возвращает значение HRESULT, основанное на коде ошибки устройства, как описано в этом разделе. Так как преобразование применяется к коду ошибки устройства для создания значения HRESULT, вы не можете считывать код ошибки устройства непосредственно из значения HRESULT.

Преобразование кода ошибки устройства в код HRESULT

Существуют как стандартные, так и не стандартные коды ошибок устройства. Стандартные коды имеют одинаковое значение для всех устройств, сертифицированных UPnP, и имеют значения менее 600. Коды, не являющиеся стандартными, относятся к поставщику и имеют значения от 600 до 899.

Указывает, является ли код ошибки устройства стандартным, определяет, как создается значение HRESULT:

  • Стандартный код ошибки устройства сопоставляется со значением HRESULT.
  • Код ошибки нестандартного устройства внедрен в значение HRESULT путем применения формулы.

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

Получение кода ошибки устройства из значения HRESULT

Если значение HRESULT больше или равно UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) и меньше или равно UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), код ошибки устройства нестандартен — используйте формулу в следующем разделе, чтобы определить код ошибки. В противном случае код ошибки устройства является стандартным— используйте таблицу в разделе "Сопоставление стандартных кодов ошибок устройства", который предоставляет сопоставление из значения HRESULT с кодом ошибки устройства.

Для текстового описания ошибки после вызова IUPnPService::InvokeActionзадайте параметру pvarRetVal пустой массив. По возвращении этот параметр будет содержать текстовое описание ошибки, если произошло какое-либо.

Формула для кодов ошибок нестандартного устройства

Используйте следующую формулу, если UPNP_E_ACTION_SPECIFIC_BASEHRESULTUPNP_E_ACTION_SPECIFIC_MAX.

Код ошибки устройства = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE

Подставляя фактические числовые значения, уравнение равно: Код ошибки устройства = (HRESULT - 0x80040300) + 0x0258

Сопоставление стандартных кодов ошибок устройств

Используйте следующее сопоставление, если HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.

Значение HRESULT Код ошибки устройства Фактическое значение
UPNP_E_INVALID_ACTION (недопустимое действие) ОШИБКА_НЕДОПУСТИМОЕ_ДЕЙСТВИЕ 401
UPNP_E_INVALID_ARGUMENTS (НЕВЕРНЫЕ_АРГУМЕНТЫ) ОШИБКА_НЕДОПУСТИМЫЙ_АРГУМЕНТ 402
UPNP_E_ВНЕ СИНХРОНИЗАЦИИ ОШИБКА_НЕДОПУСТИМЫЙ_НОМЕР_ПОСЛЕДОВАТЕЛЬНОСТИ 403
UPNP_E_INVALID_VARIABLE (недопустимая переменная) FAULT_INVALID_VARIABLE 404
UPNP_E_ОШИБКА_ЗАПРОС_ДЕЙСТВИЯ_НЕ_УДАЛСЯ ВНУТРЕННЯЯ ОШИБКА УСТРОЙСТВА 501

 

Дополнительные сведения

Коды ошибок устройства указаны в разделе "Архитектура устройства UPnP версии 1.0". Константы, упомянутые в этом разделе, определяются в файлах Upnp.h и Upnp.idl.