【发布时间】:2019-01-04 07:46:15
【问题描述】:
这更像是一种好奇心。我一直在查看许多 Win32 API 和 Windows 组件返回以表示错误的 HRESULT 错误代码。
如果我正确理解its structure,最高有效位 31 是错误位。如果已设置,则 HRESULT 包含错误。
例如,0x80004002 是 E_NOINTERFACE:
不支持此类接口。
但是当它的两个最高有效位设置为0xC0262588 时会发生什么?是什么让它与众不同?
上面的那个值似乎也转化为一个错误,即ERROR_GRAPHICS_MCA_INTERNAL_ERROR:
发生内部监视器配置 API 错误。
编辑:documentation declares 这样的值是无效的,但随后会列出多个据称无效的值。
【问题讨论】:
-
由于
HRESULT的类型定义为long,因此第一个错误位是一种使用通用if (value < 0)检查结果的方法。 -
@DavidHeffernan:是的,我可以看到。但是有四分之一的this page 充满了以
0xC开头的HRESULT代码。这就是我想要理解的。 MS 明显违反了这条规则。 -
@DavidHeffernan:我以为我在原始帖子中链接到了那个页面。
-
该问题应明确说明文档声明此类值无效,然后继续列出多个据称无效的值。就目前而言,您是否知道文档声明此类值无效,这一点并不明显。你没有提到它对第 30 位的说法,而且据我们所知,你还没有阅读过文档的那部分内容。提出问题时,请向读者说明您的知识和研究范围。
-
如果Using NTSTATUS 在
NT_WARNING(Status)和NT_ERROR(Status)(8 vs c) 之间存在显着差异,我们在代码中考虑了这一点(例如copy data 和completion。但在caseHRESULT我们可以简单地忽略 8xxxxxxx 和 cxxxxxxx 之间的不同