设备错误代码

InvokeActionQueryStateVariable 方法返回的 HRESULT 值可能指示设备错误 (即从 UPnP 认证的设备收到的错误) 。 如果从设备收到错误,则方法 (InvokeActionQueryStateVariable) 返回基于设备错误代码的 HRESULT 值,如本主题中所述。 由于将转换应用于设备错误代码以生成 HRESULT 值,因此无法直接从 HRESULT 值读取设备错误代码。

将设备错误代码转换为 HRESULT

有标准和非标准设备错误代码。 标准代码在所有 UPnP 认证的设备上具有相同的含义,其值小于 600。 非标准代码特定于供应商,其值范围为 600 到 899。

设备错误代码是否为标准代码决定了 HRESULT 值的生成方式:

  • 标准设备错误代码映射到 HRESULT 值。
  • 通过应用公式,将非标准设备错误代码嵌入到 HRESULT 值中。

这两个过程都可以撤消,以确定特定 HRESULT 值中的设备错误代码。

从 HRESULT 值派生设备错误代码

如果 HRESULT 值大于或等于 UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) 且小于或等于 UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B) ,则设备错误代码为非标准 - 请使用以下部分中的公式来确定错误代码。 否则,设备错误代码为标准 - 请使用“标准设备错误代码映射”部分中的表,该表提供从 HRESULT 值到设备错误代码的映射。

若要在调用 IUPnPService::InvokeAction 后对错误进行文本说明,请将 pvarRetVal 参数设置为空数组。 返回后,此参数将包含错误的文本说明(如果发生)。

非标准设备错误代码的公式

如果 UPNP_E_ACTION_SPECIFIC_BASE≤HRESULTUPNP_E_ACTION_SPECIFIC_MAX,请使用以下公式。

设备错误代码 = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE

用实际数值替换公式为:设备错误代码 = (HRESULT - 0x80040300) + 0x0258

标准设备错误代码的映射

如果 HRESULT<UPNP_E_ACTION_SPECIFIC_BASE,请使用以下映射。

HRESULT 值 设备错误代码 实际值
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

 

更多信息

设备错误代码在“UPnP 设备体系结构版本 1.0”中指定。 本主题中提到的常量在 Upnp.h 和 Upnp.idl 文件中定义。