Share via


Códigos de error del dispositivo

Los métodos InvokeAction y QueryStateVariable devuelven valores HRESULT que podrían indicar un error de dispositivo (es decir, un error que se recibe de un dispositivo certificado por UPnP). Si se recibe un error de un dispositivo, el método (InvokeAction o QueryStateVariable) devuelve un valor HRESULT basado en el código de error del dispositivo, como se explica en este tema. Dado que se aplica una conversión al código de error del dispositivo para generar un valor HRESULT , no se puede leer el código de error del dispositivo directamente desde el valor HRESULT .

Conversión de un código de error de dispositivo a UN HRESULT

Hay códigos de error de dispositivo estándar y no estándar. Los códigos estándar tienen el mismo significado en todos los dispositivos certificados por UPnP y tienen valores inferiores a 600. Los códigos no estándar son específicos del proveedor y tienen valores comprendidos entre 600 y 899.

Si el código de error del dispositivo es estándar determina cómo se genera el valor HRESULT :

  • Un código de error de dispositivo estándar se asigna a un valor HRESULT .
  • Un código de error de dispositivo no estándar se inserta en el valor HRESULT aplicando una fórmula.

Ambos procedimientos se pueden invertir para determinar el código de error del dispositivo a partir de un valor HRESULT determinado.

Derivar un código de error de dispositivo a partir de un valor HRESULT

Si el valor HRESULT es mayor o igual que UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) y menor o igual que UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), el código de error del dispositivo no es estándar, use la fórmula de la sección siguiente para determinar el código de error. De lo contrario, el código de error del dispositivo es estándar: use la tabla de la sección Mapping for Standard Device Error Codes (Asignación de códigos de error de dispositivo estándar), que proporciona la asignación del valor HRESULT al código de error del dispositivo.

Para obtener una descripción de texto del error después de una llamada a IUPnPService::InvokeAction, establezca el parámetro pvarRetVal en una matriz vacía. Tras la devolución, este parámetro contendrá una descripción de texto del error, si se ha producido alguno.

Fórmula para códigos de error de dispositivo no estándar

Use la fórmula siguiente si UPNP_E_ACTION_SPECIFIC_BASE ≤ ≤ HRESULTUPNP_E_ACTION_SPECIFIC_MAX.

Código de error del dispositivo = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE

Sustituyendo los valores numéricos reales, la ecuación es: Código de error del dispositivo = (HRESULT - 0x80040300) + 0x0258

Asignación de códigos de error de dispositivo estándar

Use la siguiente asignación si HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.

Valor HRESULT Código de error del dispositivo Valor real
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

 

Más información

Los códigos de error del dispositivo se especifican en "UPnP Device Architecture version 1.0". Las constantes mencionadas en este tema se definen en los archivos Upnp.h y Upnp.idl.