Gerätefehlercodes
Die Methoden InvokeAction und QueryStateVariable geben HRESULT-Werte zurück, die auf einen Gerätefehler hinweisen können (d. h. einen 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-Standard-Gerätefehlercodes. Die Standardcodes haben die gleiche Bedeutung für alle UPnP-zertifizierten Geräte 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 Standardcode für Gerätefehler 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 anhand eines bestimmten HRESULT-Werts 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 standard. Verwenden Sie die Formel im folgenden Abschnitt, um den Fehlercode zu bestimmen. Andernfalls ist der Gerätefehlercode standard. Verwenden Sie die Tabelle im Abschnitt Mapping for Standard Device Error Codes (Zuordnung für Standardgerätefehlercodes), die die Zuordnung vom HRESULT-Wert zum Gerätefehlercode bereitstellt.
Legen Sie für eine Textbeschreibung des Fehlers nach einem Aufruf von IUPnPService::InvokeActionden Parameter pvarRetVal auf ein leeres Array fest. Nach der Rückgabe enthält dieser Parameter ggf. eine Textbeschreibung des Fehlers.
Formel für Nichtstandard-Gerätefehlercodes
Verwenden Sie die folgende Formel, wenn UPNP _ E ACTION SPECIFIC _ _ _ BASE ≤ HRESULT ≤UPNP _ E ACTION SPECIFIC _ _ _ MAX.
Gerätefehlercode = (HRESULT - UPNP _ E ACTION SPECIFIC _ _ _ BASE) + FAULT ACTION SPECIFIC _ _ _ BASE
Durch Ersetzen der tatsächlichen numerischen Werte lautet die Gleichung: Gerätefehlercode = (HRESULT - 0x80040300) + 0x0258
Zuordnung für Standardgerätefehlercodes
Verwenden Sie die folgende Zuordnung, wenn HRESULT < UPNP _ E ACTION SPECIFIC BASE _ _ _ ist.
| HRESULT-Wert | Gerätefehlercode | Tatsächlicher Wert |
|---|---|---|
| UPNP _ E _ INVALID _ ACTION | FEHLER: _ UNGÜLTIGE _ AKTION | 401 |
| UPNP _ E _ UNGÜLTIGE _ ARGUMENTE | FEHLER _ UNGÜLTIGES _ ARG | 402 |
| UPNP _ E _ OUT _ OF _ SYNC | FEHLER _ UNGÜLTIGE _ _ SEQUENZNUMMER | 403 |
| UPNP _ E _ INVALID _ VARIABLE | FEHLER _ _ UNGÜLTIGE VARIABLE | 404 |
| _FEHLER BEI UPNP-E-AKTIONSANFORDERUNG _ _ _ | _INTERNER FEHLER DES FEHLERGERÄTS _ _ | 501 |
Weitere Informationen
Gerätefehlercodes werden in "UPnP-Gerätearchitektur Version 1.0" angegeben. Die in diesem Thema erwähnten Konstanten werden in den Dateien Upnp.h und Upnp.idl definiert.