Коды ошибок устройства
Методы 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.