设备错误代码
InvokeAction 和 QueryStateVariable 方法返回的 HRESULT 值可能指示设备错误 (即从 UPnP 认证的设备收到的错误) 。 如果从设备收到错误,则方法 (InvokeAction 或 QueryStateVariable) 返回基于设备错误代码的 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≤HRESULT ≤UPNP_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 文件中定义。