【问题标题】:SMBIOS Enum Values. Documentation error?SMBIOS 枚举值。文档错误?
【发布时间】:2013-05-10 11:05:17
【问题描述】:

我正在尝试为 Windows 上的 SMBIOS 编写一个简单的解析器。

在阅读 2.6.1 版本的文档(2.6 是我笔记本电脑上的 SMBIOS 版本)时,我遇到了系统信息条目(类型 1 - 第 3.3.2 节)。

在文档中,它说表示唤醒类型的 BYTE 值是一个枚举(即一个位字段,其中每个位表示是否存在唤醒类型,1 或 0)。

现在,在下面的 3.3.2.2 小节中,为位偏移量 00h 到 08h 定义了枚举,使其总共有 9 个位值。一个 BYTE 仅包含 8 位。是文档错误还是我遗漏了什么?

我只想将 BYTE 从结构中取出并按位进行 AND 以找出具有以下掩码的唤醒类型:

#define SM_SI_OTHER             0x00000001
#define SM_SI_UNKNOWN           0x00000010
#define SM_SI_APM_TIMER         0x00000100
#define SM_SI_MODERN_RING       0x00001000
#define SM_SI_LAN_REMOTE        0x00010000
#define SM_SI_POWER_SWITCH      0x00100000
#define SM_SI_PCI_PME           0x01000000
#define SM_SI_AC_POWER_RESTORED 0x10000000

这里我错过了保留值。我该怎么做?

这是我使用的文档的链接:http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.6.1.pdf

提前感谢您的回答。

【问题讨论】:

    标签: c++ windows bit-manipulation


    【解决方案1】:

    我查看了文档,它说该字段是枚举,而不是位掩码。

    【讨论】:

    • 我认为您一定将枚举与位掩码混淆了。虽然枚举可以以位掩码的方式完成,但它们通常不是。在这种情况下,唤醒类型一次只保存一个值。 1 = 其他,2 = 未知,3 = 计时器,等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多