Поделиться через


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

Методы 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_BASE≤ HRESULTUPNP_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 FAULT_INVALID_ACTION 401
UPNP_E_INVALID_ARGUMENTS FAULT_INVALID_ARG 402
UPNP_E_OUT_OF_SYNC FAULT_INVALID_SEQUENCE_NUMBER 403
UPNP_E_INVALID_VARIABLE FAULT_INVALID_VARIABLE 404
UPNP_E_ACTION_REQUEST_FAILED FAULT_DEVICE_INTERNAL_ERROR 501

 

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

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