Gerätefehlercodes
Die Methoden InvokeAction und QueryStateVariable geben HRESULT-Werte zurück, die auf einen Gerätefehler hinweisen können (d. h. ein Fehler, der von einem UPnP-zertifizierten Gerät empfangen wird). Wenn ein Fehler von einem Gerät empfangen wird, gibt die Methode (InvokeAction oder QueryStateVariable) einen HRESULT-Wert zurück, der auf dem Gerätefehlercode basiert, wie in diesem Thema erläutert. Da eine Konvertierung auf den Gerätefehlercode angewendet wird, um einen HRESULT-Wert zu erzeugen, können Sie den Gerätefehlercode nicht direkt aus dem HRESULT-Wert lesen.
Konvertierung eines Gerätefehlercodes in ein HRESULT
Es gibt sowohl Standard- als auch nicht standardmäßige Gerätefehlercodes. Die Standardcodes haben für alle UPnP-zertifizierten Geräte die gleiche Bedeutung und weisen Werte auf, die kleiner als 600 sind. Die nicht standardmäßigen Codes sind herstellerspezifisch und weisen Werte zwischen 600 und 899 auf.
Ob der Gerätefehlercode standard ist, bestimmt, wie der HRESULT-Wert generiert wird:
- Ein Standardmäßiger Gerätefehlercode wird einem HRESULT-Wert zugeordnet.
- Ein nicht standardmäßiger Gerätefehlercode wird durch Anwenden einer Formel in den HRESULT-Wert eingebettet.
Beide Verfahren können umgekehrt werden, um den Gerätefehlercode aus einem bestimmten HRESULT-Wert zu bestimmen.
Ableiten eines Gerätefehlercodes von einem HRESULT-Wert
Wenn der HRESULT-Wert größer oder gleich UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) und kleiner oder gleich UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B) ist, ist der Gerätefehlercode nicht standardgemäß. Verwenden Sie die Formel im folgenden Abschnitt, um den Fehlercode zu bestimmen. Andernfalls ist der Gerätefehlercode Standard. Verwenden Sie die Tabelle im Abschnitt Zuordnung für Standardgerätefehlercodes, die die Zuordnung zwischen dem HRESULT-Wert und dem Gerätefehlercode bereitstellt.
Legen Sie für eine Textbeschreibung des Fehlers nach einem Aufruf von IUPnPService::InvokeAction den Parameter pvarRetVal auf ein leeres Array fest. Bei der Rückgabe enthält dieser Parameter eine Textbeschreibung des Fehlers, falls ein Fehler aufgetreten ist.
Formel für nicht standardmäßige Gerätefehlercodes
Verwenden Sie die folgende Formel, wenn UPNP_E_ACTION_SPECIFIC_BASEHRESULT ≤ ≤UPNP_E_ACTION_SPECIFIC_MAX.
Gerätefehlercode = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE
Die Gleichung, die die tatsächlichen numerischen Werte ersetzt, lautet: Gerätefehlercode = (HRESULT - 0x80040300) + 0x0258
Zuordnung für Standardgerätefehlercodes
Verwenden Sie die folgende Zuordnung, wenn HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.
HRESULT-Wert | Gerätefehlercode | Tatsächlicher Wert |
---|---|---|
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 |
Weitere Informationen
Gerätefehlercodes werden in "UPnP Device Architecture Version 1.0" angegeben. Die in diesem Thema erwähnten Konstanten sind in den Dateien Upnp.h und Upnp.idl definiert.