Partager via


Codes d’erreur de l’appareil

Les méthodes InvokeAction et QueryStateVariable retournent des valeurs HRESULT qui peuvent indiquer une erreur d’appareil (c’est-à-dire une erreur reçue d’un appareil certifié UPnP). Si une erreur est reçue d’un appareil, la méthode (InvokeAction ou QueryStateVariable) retourne une valeur HRESULT basée sur le code d’erreur de l’appareil, comme expliqué dans cette rubrique. Étant donné qu’une conversion est appliquée au code d’erreur de l’appareil pour produire une valeur HRESULT , vous ne pouvez pas lire le code d’erreur de l’appareil directement à partir de la valeur HRESULT .

Conversion d’un code d’erreur d’appareil en HRESULT

Il existe des codes d’erreur d’appareil standard et non standard. Les codes standard ont la même signification pour tous les appareils certifiés UPnP et ont des valeurs inférieures à 600. Les codes non standard sont spécifiques au fournisseur et ont des valeurs comprises entre 600 et 899.

Si le code d’erreur de l’appareil est standard ou non, détermine la façon dont la valeur HRESULT est générée :

  • Un code d’erreur d’appareil standard est mappé à une valeur HRESULT .
  • Un code d’erreur d’appareil non standard est incorporé dans la valeur HRESULT en appliquant une formule.

Ces deux procédures peuvent être inversées pour déterminer le code d’erreur de l’appareil à partir d’une valeur HRESULT particulière.

Dérivation d’un code d’erreur d’appareil à partir d’une valeur HRESULT

Si la valeur HRESULT est supérieure ou égale à UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) et inférieure ou égale à UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), le code d’erreur de l’appareil est non standard. Utilisez la formule de la section suivante pour déterminer le code d’erreur. Sinon, le code d’erreur de l’appareil est standard. Utilisez le tableau de la section Mappage des codes d’erreur d’appareil standard, qui fournit le mappage de la valeur HRESULT au code d’erreur de l’appareil.

Pour obtenir une description textuelle de l’erreur après un appel à IUPnPService::InvokeAction, définissez le paramètre pvarRetVal sur un tableau vide. Au retour, ce paramètre contient une description textuelle de l’erreur, le cas échéant.

Formule pour les codes d’erreur d’appareil non standard

Utilisez la formule suivante si UPNP_E_ACTION_SPECIFIC_BASEhresultUPNP_E_ACTION_SPECIFIC_MAX.

Code d’erreur de l’appareil = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE

En remplaçant les valeurs numériques réelles, l’équation est : Device Error Code = (HRESULT - 0x80040300) + 0x0258

Mappage pour les codes d’erreur d’appareil standard

Utilisez le mappage suivant si HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.

Valeur HRESULT Code d’erreur de l’appareil Valeur réelle
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

 

Informations complémentaires

Les codes d’erreur de l’appareil sont spécifiés dans « UPnP Device Architecture version 1.0 ». Les constantes mentionnées dans cette rubrique sont définies dans les fichiers Upnp.h et Upnp.idl.