Partilhar via


Códigos de erro do dispositivo

Os métodos InvokeAction e QueryStateVariable retornam valores HRESULT que podem indicar um erro de dispositivo (ou seja, um erro recebido de um dispositivo certificado por UPnP). Se um erro for recebido de um dispositivo, o método (InvokeAction ou QueryStateVariable) retornará um valor HRESULT baseado no código de erro do dispositivo, conforme explicado neste tópico. Como uma conversão é aplicada ao código de erro do dispositivo para produzir um valor HRESULT , você não pode ler o código de erro do dispositivo diretamente do valor HRESULT .

Conversão de um código de erro de dispositivo em um HRESULT

Há códigos de erro de dispositivo padrão e não padrão. Os códigos padrão têm o mesmo significado em todos os dispositivos certificados por UPnP e têm valores inferiores a 600. Os códigos não padrão são específicos do fornecedor e têm valores que variam de 600 a 899.

Se o código de erro do dispositivo é padrão determina ou não como o valor HRESULT é gerado:

  • Um código de erro de dispositivo padrão é mapeado para um valor HRESULT .
  • Um código de erro de dispositivo não padrão é inserido no valor HRESULT aplicando uma fórmula.

Ambos os procedimentos podem ser invertidos para determinar o código de erro do dispositivo de um valor HRESULT específico.

Derivando um código de erro do dispositivo de um valor HRESULT

Se o valor HRESULT for maior ou igual a UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) e menor ou igual a UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), o código de erro do dispositivo não será padrão , use a fórmula na seção a seguir para determinar o código de erro. Caso contrário, o código de erro do dispositivo é padrão – use a tabela na seção Mapeamento para códigos de erro de dispositivo padrão, que fornece o mapeamento do valor HRESULT para o código de erro do dispositivo.

Para obter uma descrição de texto do erro após uma chamada para IUPnPService::InvokeAction, defina o parâmetro pvarRetVal como uma matriz vazia. Após o retorno, esse parâmetro conterá uma descrição de texto do erro, se ocorrer algum.

Fórmula para códigos de erro de dispositivo não padrão

Use a fórmula a seguir se UPNP_E_ACTION_SPECIFIC_BASE≤ HRESULTUPNP_E_ACTION_SPECIFIC_MAX.

Código de erro do dispositivo = (UPNP_E_ACTION_SPECIFIC_BASE HRESULT - ) + FAULT_ACTION_SPECIFIC_BASE

Substituindo os valores numéricos reais, a equação é: Código de Erro do Dispositivo = (HRESULT - 0x80040300) + 0x0258

Mapeamento para códigos de erro de dispositivo padrão

Use o mapeamento a seguir se o HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.

Valor HRESULT Código de erro do 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

 

Mais informações

Os códigos de erro do dispositivo são especificados em "Arquitetura de Dispositivo UPnP versão 1.0". As constantes mencionadas neste tópico são definidas nos arquivos Upnp.h e Upnp.idl.